在哪里使用这个 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()
(或其他标准输入函数)调用中处理的情况下,您不会使用这样的循环。
我刚开始学习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()
(或其他标准输入函数)调用中处理的情况下,您不会使用这样的循环。