【发布时间】:2012-09-10 05:44:14
【问题描述】:
这对我来说毫无意义,但希望你们中的一个人明白为什么会这样。
我有一个作业需要使用 getchar() 读取三个字符,因为三个相邻的整数彼此相关,所以我设置了一个循环结构如下:
int c1, c2, c3 = 0;
while(c3 != EOF) {
c1 = getchar();
c2 = getchar();
c3 = getchar();
... do something with them...
}
问题是如果字符的数量不能被三整除,最后的迭代就不会执行。因此,如果输入字符“Abcd”,它将在 Abc 上执行第一次迭代,但第二次迭代不会对 D 执行任何操作。“Abcde”也是如此,但 Abcdef 会起作用。
这是一个家庭作业,所以不要为我解决问题,但如果没有找到那么多字符,它只会终止循环,这对 getchar 是否有些奇怪?
【问题讨论】:
-
如果只输入
Abcd,你想发生什么? -
c2 和 c3 应为零,c1 应包含 D 的值
-
你是如何提供输入的?如果您在命令行输入文本,之后是按
Ctrl+D(Linux)还是Ctrl+Z(Windows)? -
@user1661781:c2 是
\n,c3 仍在等待输入。 -
它是顺序循环的,所以你的工作要等到输入
c3之后才能完成。因此,如果您输入“abcd”,即 4 个字符,那么您就在c2 = getchar();代码行……在您的工作再次完成之前,您还有 2 个字符要走。