有没有其他方法可以在c中清除输入缓冲区而不用
fflush();
或
while(getchar()!='\n');
因为我到处都读过了,找不到其他的方法来做。
yacmzcpb1#
最好的解决方案是不要太依赖输入缓冲区的状态。使用fgets()将输入作为整行读取,然后解析它们。不要用例如。scanf()来读取单个值,因为它以令人讨厌的方式与缓冲区进行交互。
fgets()
scanf()
wsxa1bj12#
使用fgets()作为suggester @unwind最佳方法。冲到最后。
void FlushStdin(void) { int ch; while(((ch = getchar()) !='\n') && (ch != EOF)); }
如果stdin已准备好刷新到行尾,则调用FlushStdin()或其他发布的scanf()、fgetc()解决方案将刷新到 next 行尾。注意,如果下一个char是'\n',则scanf("%*[^\n]%*1[\n]"); * 不 * 工作。
stdin
FlushStdin()
fgetc()
char
'\n'
scanf("%*[^\n]%*1[\n]");
ha5z0ras3#
清除输入缓冲区(stdin)的另一种方法是使用
scanf("%*[^\n]"); scanf("%*c");
%*[^\n]指示scanf扫描所有内容,直到出现新行字符(\n),然后丢弃它。%*c告诉scanf扫描并丢弃一个字符,在本例中是换行符。
%*[^\n]
scanf
\n
%*c
3条答案
按热度按时间yacmzcpb1#
最好的解决方案是不要太依赖输入缓冲区的状态。
使用
fgets()
将输入作为整行读取,然后解析它们。不要用例如。scanf()
来读取单个值,因为它以令人讨厌的方式与缓冲区进行交互。wsxa1bj12#
使用
fgets()
作为suggester @unwind最佳方法。冲到最后。
如果
stdin
已准备好刷新到行尾,则调用FlushStdin()
或其他发布的scanf()
、fgetc()
解决方案将刷新到 next 行尾。注意,如果下一个
char
是'\n'
,则scanf("%*[^\n]%*1[\n]");
* 不 * 工作。ha5z0ras3#
清除输入缓冲区(
stdin
)的另一种方法是使用%*[^\n]
指示scanf
扫描所有内容,直到出现新行字符(\n
),然后丢弃它。%*c
告诉scanf
扫描并丢弃一个字符,在本例中是换行符。