所以我正在練習c,並且在使用fgets()時得到這個錯誤。代碼的第一個實例被跳過並進入下一行。fgets()的第一個實例正在被跳過
CODE
for(g = 0;g<numStudents;g++)
{
array->firstName = malloc(sizeof(char)*BUFSIZE);
array->lastName = malloc(sizeof(char)*BUFSIZE);
printf("Student %d\n", g+1);
printf("First Name:");
fgets(array->firstName, BUFSIZE, stdin);
printf("Last Name:");
fgets(array->lastName, BUFSIZE, stdin);
printf("\n\n");
}
我用這部分之前的scanf(),所以我發現我必須刷新緩衝區。但是,這是行不通的。
輸出通常會是:
Student 0
First Name:Last Name:(Cursor)
'sizeof(char)== 1'並且是強制性的,您可以發佈您的輸入嗎?對於固定大小也使用'malloc()'是沒有必要的。 – 2015-02-11 01:46:07
至少,[scanf()'把''\ n''作爲從前一個'scanf()']遺留下來的輸入的答案(http://stackoverflow.com/questions/1815986/does- scanf-take-n-as-input-left-from-previous-scanf)適用於您的情況。 'scanf()'可能會在'fgets()'讀入的輸入流中留下換行符作爲第一個輸入'行'。我會把它作爲一個副本來處理,但我寧願在使用Mjolnir之前達成一些共識。 – 2015-02-11 01:59:23
'scanf'後你如何刷新緩衝區? – 2015-02-11 02:00:51