【发布时间】:2016-01-12 21:41:34
【问题描述】:
所以我正在练习 c 并且在使用 fgets() 时遇到了这个错误。代码的第一个实例被跳过并转到下一行。
代码
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()固定大小。 -
至少,Does
scanf()take'\n'as input left over from previousscanf()的答案适用于您的情况。scanf()可能会在输入流中留下一个换行符,fgets()将其读取为第一个输入“行”。我会将其作为副本关闭,但我宁愿在使用 Mjolnir 之前达成一些共识。 -
scanf之后如何刷新缓冲区? -
在循环前使用
while((int c=getchar())!='\n' && c!=EOF);。