我的问题是关于如何在输入中间解释EOF,这是一个例子:
int main() {
int a, b;
printf("enter something >\n");
scanf("%d", &a);
while((b = getchar()) != EOF) {
printf("%i\n", b);
}
return b;
}
我运行程序并输入:
1hello^Z(control+z)abc
输出是:
104 (ascii number for h)
101 (for e)
108 (l)
108 (l)
111 (o)
26 (what is this?)
数字1由scanf读取,其余停留在缓冲区中,getchar()获取所有这些直到^ Z,这是预期的行为,因为控件z关闭stdin。 然而,26来自哪里?如果getchar()读取的最后一件事是EOF为什么不是-1最后一个值?同样为什么这个程序在读取^ Z时不会退出循环,为什么我需要再次使用控件z调用EOF来终止循环? 26是SUB的ascii,我不知道该怎么做。
谢谢。
答案 0 :(得分:0)
当循环结束时,b = 26,因为你输入了ctrl + z,这在返回时被解释为SUB。http://en.wikipedia.org/wiki/Substitute_character
在ASCII和Unicode字符集中,此字符(SUB)由数字26(十六进制为1A)编码。当同时按下Ctrl和Z键时,标准键盘会传输此代码(Ctrl + Z,按惯例通常称为^ Z)。