gpt4 book ai didi

c - ((c=getchar())!=EOF) 和 ((c=getchar())!='~' ) 之间的区别 ,'~' 可以是任何字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:27 27 4
gpt4 key购买 nike

一旦遇到'~',之后的任何内容都不会被打印出来,控制就出来了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) 必须是新行中终止 while 循环的第一个字符?这与getchar()和EOF(ctr+Z)的工作有关

最佳答案

这是控制台输入编辑器在 Windows/DOS 命令提示符下的工作方式。输入是逐行完成的,这就是为什么您可以来回编辑字符,直到您按下 ENTER,此时该行的内容被发送到程序并开始新的一行。

在 DOS 下编写编辑器的人决定在行首键入 ^Z 是告诉编辑器您已完成输入的方式。

问题是 EOF(文件结尾)是一个虚拟标记,并不总是一个真实字符。它的实际值 (-1) 表明它超出了字符代码的范围(这也是为什么在调用时使用 int 变量而不是 char 很重要的原因getchar()fgetc())。

事实上,你的例子...

while((c = getchar()) != EOF)
{
putchar(c);
printf(" ");
}

...如果您使用输入重定向(“program.exe < input.txt”)运行该程序并为其提供中间带有 ^Z 的文件,则可以按预期工作。在这种情况下,没有命令行编辑器。

关于c - ((c=getchar())!=EOF) 和 ((c=getchar())!='~' ) 之间的区别 ,'~' 可以是任何字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24453432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com