在循环中使用此处的位置?

时间:2015-12-22 03:42:10

标签: c while-loop getchar

我刚开始学习c编程。我不知道天气这个问题是不是很傻。 我在哪里使用

while(getchar()! ='\n') ;

在某些程序中使用 scanf 函数时,会使用上面提到的while循环,而某些其他程序在 scanf 函数之后不使用while循环。

那么,我应该在哪里使用这个 while循环而不是在哪里?

3 个答案:

答案 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。

当心EOF

顺便提一下,问题中的循环并不安全。它应该是:

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函数)调用中处理,则不会使用这样的循环。