我对正在研究的函数中发现的一段代码感到困惑:
char GetCommand( void )
{
char command;
do {
printf( "Enter command (q=quit, n=new, l=list): " );
scanf( "%c", &command );
Flush();
}
while ( (command != 'q') && (command != 'n')
&& (command != 'l') );
printf( "\n----------\n" );
return( command );
}
void Flush( void ) {
while ( getchar() != '\n' )
;
}
这里不太明白的是Flush()
函数的用法。我的意思是,我正在阅读的这本书解释说它阻止用户输入多个字符,然后在第二次提示输入时读取该字符。
我不明白 Flush()
是如何防止这种情况发生的。它什么都不做。它只是一个 while
命令。 (虽然这是真的......什么?????)没有意义。
最佳答案
getchar()
具有从输入缓冲区中删除下一个字符的副作用。 Flush
中的循环读取并丢弃字符,直到 - 并包括 - 换行符 \n
结束该行。
由于 scanf
被告知读取一个且仅一个字符 (%c
),因此这具有忽略该输入行上的所有其他内容的效果。
如果把scanf换成
可能会更清楚command = getchar();
但这实际上是一个普遍不好的例子,因为它不能很好地处理文件结尾。
一般scanf
最好忘记; fgets
和 sscanf
工作得更好,因为一个负责获取输入,另一个负责解析输入。 scanf
(和 fscanf
)尝试一次做太多的工作。
关于C getchar 与 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640604/