在哪里使用这个 while 循环?

Where to use this while loop?

我刚开始学习c编程。我不知道这个问题是否愚蠢。 我在哪里使用

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

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

那么,我应该在什么地方使用这个 while 循环,在什么地方不该使用?

在出错后使用循环清理一行的剩余部分

当您(尝试)从标准输入读取一些数据但操作失败后,您认为输入行上有碎片时,您使用类似于问题中循环的代码。

例如,如果您有:

int n;

if (scanf("%d", &n) != 1)
    …recover from error here?…

错误恢复应该检查 EOF(在这里使用 feof() 是正确的 — 但请参阅 while (!feof(file)) is always wrong 了解如何不使用 feof()),如果您没有得到 EOF,那么你得到的可能是字母或标点符号而不是数字,循环可能是合适的。

请注意,您应该始终检查 scanf() 操作 - 或任何其他输入操作 - 是否成功,并且对 scanf() 系列函数的正确检查是为了确保您获得预期的数字的成功转换。检查是否scanf() returned EOF不正确;当输入队列中有一个字母并且你要求一个数字时,你可以获得 0 returned。

当心 EOF

顺便说一句,问题中的循环并不安全。应该是:

int c;
while ((c = getchar()) != EOF && c != '\n')
    ;

如果问题中的循环得到 EOF,它将继续得到 EOF,并且不会做任何有用的事情。永远记得处理它。请注意 int c; 的使用 — getchar() return 是 int 而不是 char,尽管它的名字。它必须 return 一个 int 因为它 return 是每个有效的字符代码,而且 return 是一个不同的值 EOF,而且你不能将 257 个值放入一个 8-位数。

While 循环语法:

while (condition test)
{
      // C- statements, which requires repetition.
      // Increment (++) or Decrement (--) Operation.
}

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

这里你的条件是getchar()!='\n'。

首先 getchar() 将执行。它会询问用户的输入。此函数 returns 字符读取为无符号字符,在文件末尾或错误时转换为 int 或 EOF。 while 循环继续执行直到 return 值与 '\n'

不匹配

scanf() 示例:scanf("%s", &str1);

使用 scanf 时,您只能要求用户进行一次输入。对于不止一次输入,您必须将 scanf 置于循环中。

当你要求在 while 循环条件下向用户输入输入时,它会一直要求用户输入,直到出现 EOF 信号。

scanf() 格式字符串不会导致它从输入缓冲区读取换行符时。

大多数简单格式说明符不会读取换行符。然而,如果你使用 %c,任何字符都可能被读取,包括换行符,在这种情况下循环将需要修改:

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

其中 ch 是接收 %c 输入的变量。

因为控制台输入通常是行缓冲的,未能使用换行符将导致后续的标准输入读取函数立即 return 而无需等待进一步的输入,这很少是预期的。

在一行中输入多个字段但在单独的 scanf()(或其他标准输入函数)调用中处理的情况下,您不会使用这样的循环。