一旦遇到“〜”,之后的任何内容都不会被打印出来并且控制权出来 while循环
while((c = getchar()) != '~')
{
putchar(c);
printf(" ");
}
input: asdf~jkl
output: a s d f //control is out of while loop
遇到“^ Z”时,之后的任何内容都不会被打印,但控件不会出现在while循环中
while((c = getchar()) != EOF)
{
putchar(c);
printf(" ");
}
input: asdf^Zjkl
output a s d f -> //control is still inside while loop
请解释为什么会这样? 一旦遇到EOF,while循环必须退出,但这不会发生。 是否必须(ctrl + Z)必须是新行的第一个字符才能循环终止? 这与getchar()和EOF(ctr + Z)
的工作有关答案 0 :(得分:2)
这是控制台输入编辑器在Windows / DOS命令提示符下的工作方式。输入是逐行完成的,这就是为什么你可以来回编辑字符,直到你按下ENTER,然后该行的内容被发送到程序并开始一个新行。
在DOS下编写编辑器的人决定在行的开头键入^ Z是告诉编辑你已完成输入的方法。
问题是EOF(文件末尾)是虚拟标记,并不总是真正的字符。它的实际值(-1)表明超出了字符代码的范围(这也是为什么在调用int
时使用char
变量而不是getchar()
的重要性。 fgetc()
)。
事实上,你的例子......
while((c = getchar()) != EOF)
{
putchar(c);
printf(" ");
}
...如果您使用输入重定向(“program.exe< input.txt”)运行程序,以便在中间为^ Z提供文件,则可以按预期工作。在这种情况下,路上没有命令行编辑器。