这是我面临的问题的一个例子:
void print() {
printf("Hello");
}
int main() {
char a[LENGTH]; //LENGTH equals 20
printf("Please enter something: ");
fgets(a, LENGTH, stdin);
print();
return 0;
}
程序在屏幕上显示“请输入内容:”,并且不允许用户使用fgets()函数输入字符串。它直接移动到print()函数,因此在屏幕上打印“Hello”。
为什么会这样?有没有办法解决它?
修改:
此代码也会出现同样的问题:
void prints(){
printf("Hello world, how are you?");
}
int main() {
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");//all these printfs are necessary.
printf("Enter a number: ");
fflush(stdout);
fflush(stdin);
int number;
scanf(" %d", &number);
printf("Please write something: \n");
char a[MAXSTRING];
fgets(a, MAXSTRING, stdin);
prints();
}
答案 0 :(得分:1)
回答更新后的问题;改变这个:
scanf(" %d", &number);
printf("Please write something: \n");
到此:
scanf(" %d", &number);
getchar();
printf("Please write something: \n");
这个问题与我们之前谈过的Caution with scanf()例子有关。用户输入一个号码,他做了什么?他点击进入!
scanf()
不会消耗它(你告诉它读取一个数字,%d
),因此换行符(来自输入笔画)保留在输入缓冲区中。然后调用fgets()
并在输入缓冲区中找到一些内容,因此它会对其起作用。
一个简单的解决方案是使用getchar()来使用新行,scanf()
没有收集,以便在调用fgets()
时输入缓冲区为空。
改变这个:
printf("Please enter something: ");
到此:
printf("Please enter something: \n");
使用换行符!
请阅读ref:
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。