我有这个程序:
#include <stdio.h>
#define SIZE 19
int main(){
char string[SIZE];
while (string[0] != 'A'){
printf("\nEnter a new string.\n");
fgets(string,SIZE,stdin);
int storage = 0;
while (storage != '\n')
{
storage = getchar();
}
}
}
如果输入的字符串超过 string[] 可以容纳的最大字符数,则存在带有 getchar() 的嵌套 while 循环。如果不存在,输入一个包含 20 个字符的字符串将导致输出为:
Enter a new string.
12345123451234512345
Enter a new string.
Enter a new string.
问题是,这需要我按 Enter 两次才能输入新字符串:一次用于“fgets”,一次用于嵌套 while 循环(这是我对发生的情况的理解)。
有没有办法改变这一点,这样我只需按“Enter”一次,或者可能有办法将整个 while 循环更改为更优雅的东西?
最佳答案
如果从 fgets
接收的缓冲区包含换行符,您就知道它会读取输入的所有内容,因此您无需执行任何其他操作。如果没有,则使用额外的循环来刷新缓冲区。
关于c - 使用 getchar() 清除输入缓冲区时如何避免按两次 Enter 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227542/