【发布时间】:2022-12-18 21:20:13
【问题描述】:
以下代码 sn-p 取自自学 C经过赫伯特席尔特第 234 页。
#include <stdio.h>
int main(void)
{
char ch;
do
{
ch = getchar(); //suppose asdf is input
putchar('.');
} while (ch != '\n');
return 0;
}
哪个返回,
asdf
.....
Process returned 0 (0x0) execution time : 0.050 s
Press any key to continue.
在此 sn-p Herbert Schildt 之后写道:“您将在屏幕上看到的不是在每个字符之间打印一个句点,而是您在按 ENTER 键之前键入的所有字母,后跟一串句点。”
我被这个 sn-p 困住了 while。我尝试了 sn-p 的一些变体以更好地理解它,这提出了比回答更多的问题。这其实违背了我目前的理解。而不是打印出上面的输出,我目前的理解建议以下输出:
asdf //input asdf
.
asd //input asd
.
\n //hit ENTER
.
Process returned 0 (0x0) execution time : 0.050 s
Press any key to continue.
通过以上介绍,我有以下疑问:
- 上面的 sn-p 是如何循环的?
- 我现在有什么问题直觉?
【问题讨论】:
-
getchar() 读取单个字符。循环每次迭代读取一个字符,并在读取 '\n' 时退出。然后程序结束。运行此程序时,您只能输入一行。我希望新阅读代码的人会看到类似“a.s.d.f..”的内容。您看不到这一点的原因是 I/O 被缓冲并且只有当缓冲区被刷新到输出设备时才会输出到屏幕。在这个程序中,输出缓冲区通常只会在程序退出时被刷新。 See this question
-
我对这本书不熟悉,但是名字赫伯特席尔特为我举起红旗。我记得那个作者以写关于 C 的坏书而闻名。You might want to take a look at this, though it is about a different C book by the same author.
-
关于如何处理“键盘”输入的一些实际细节,以及所涉及的各个子系统之间的交互,可能会非常复杂。我可以推荐this answer、these course notes和this other question。
标签: c while-loop