我刚开始学习c编程。我不知道天气这个问题是不是很傻。 我在哪里使用
while(getchar()! ='\n') ;
在某些程序中使用 scanf 函数时,会使用上面提到的while循环,而某些其他程序在 scanf 函数之后不使用while循环。
那么,我应该在哪里使用这个 while循环而不是在哪里?
答案 0 :(得分:1)
当您(尝试)从标准输入读取某些数据但操作失败后,如果您认为输入行上有碎片,则使用与问题中的循环类似的代码。
例如,如果你有:
int n;
if (scanf("%d", &n) != 1)
…recover from error here?…
错误恢复应检查EOF(在此处使用feof()
是正确的 - 但请参阅while (!feof(file))
is always wrong了解如何不使用feof()
),如果您没有获得EOF ,那么你可能有一个字母或标点字符而不是数字,循环可能是合适的。
请注意,您应该始终检查scanf()
操作 - 或任何其他输入操作 - 是否成功,并且正确检查scanf()
系列函数是为了确保您获得预期的成功数量转换。检查scanf()
是否返回EOF是不正确的;当输入队列中有一个字母并且你要求一个数字时,你可以得到0。
顺便提一下,问题中的循环并不安全。它应该是:
int c;
while ((c = getchar()) != EOF && c != '\n')
;
如果问题中的循环得到EOF,它会继续获得EOF,并且不会做任何有用的事情。永远记得要处理它。请注意,使用int c;
- getchar()
会返回int
而不是char
,尽管它的名称。它必须返回int
,因为它返回每个有效的字符代码并返回一个不同的值EOF,并且您不能将257个值装入8位数量。
答案 1 :(得分:0)
while循环语法:
while (condition test)
{
// C- statements, which requires repetition.
// Increment (++) or Decrement (--) Operation.
}
while(getchar()!='\ n');
这里你的条件是getchar()!='\ n'。
首先getchar()将执行。它会询问用户的输入。此函数将读取的字符作为unsigned char转换返回到文件末尾或错误的int或EOF。循环保持继续执行,直到返回值与'\ n'
不匹配scanf()示例:scanf(“%s”,& str1);
使用scanf,您可以要求用户输入一次输入。对于多个输入,您必须将scanf置于循环中。
在while循环条件下要求输入用户的位置因此,在EOF信号出现之前,它将继续询问用户的输入。
答案 2 :(得分:0)
当scanf()
格式字符串不会导致它从输入缓冲区读取换行符时。
大多数简单的格式说明符都不会读取换行符。但是,如果使用%c
,则可能会读取任何字符,包括换行符,在这种情况下,循环将需要修改:
while( ch != '\n' && getchar() != '\n' ) ;
ch
是接收%c
输入的变量。
因为控制台输入通常是行缓冲的,所以如果不使用换行符将导致后续的stdin读取函数立即返回而不等待进一步的输入,这很少是预期的。
如果在一行中输入多个字段但在单独的scanf()
(或其他stdin函数)调用中处理,则不会使用这样的循环。