炸蝦碎碎念。

[Notes, GNU/Linux, Open Source, Ruby on Rails, Computer Science, Archlinux]

[C/C++] Scanf造成之後的fgets不正常

常常在Online Judge出現的小問題 太久沒寫忘記害我debug好久zz

比如說 這樣寫看起來很合理 不過總是會莫名多輸出一行

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main()
{
  char s[101];
  int n;
  while (scanf("%d", &n) != EOF && x) {
      while (--n) {
          fgets(s, 100, stdin);
          puts(s);
      }
  }
}

其實只要在scanf後面加上個getchar()像這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main()
{
    char s[101];
    int n;
    while (scanf("%d", &n) != EOF && x) {
        while(getchar() != '\n') //removeing the trailing '\n'
              ;
        while (--n) {
            fgets(s, 100, stdin);
            puts(s);
        }
    }
}

原因是scanf把input的n吃掉之後 在那行會留下一個'\n' 造成後面運作不正常

Comments