gpt4 book ai didi

c - 为什么 EOF(文件结尾)在行尾没有 '\n' 之前不起作用?

转载 作者:行者123 更新时间:2023-12-01 08:57:00 24 4
gpt4 key购买 nike

所以我开始使用 ANSI C 书学习 C。本书的早期练习之一是编写一个程序,接受文本输入并在新行上打印每个单词,非常简单。所以我做了:

#include <stdio.h>

#define IN 1
#define OUT 0

main() {

int c;
int state;

state = OUT;

while((c = getchar()) != EOF){
if(c != ' ' && c != '\n' && c != '\t'){
state = IN;
}else if(state == IN){
state = OUT;
putchar('\n');
}
if(state == IN)
putchar(c);
}

getchar();
}

问题是,虽然程序运行良好,但如果我在一行的最后一个字符或中间输入 EOF(Windows 上的 Ctrl+Z),它不会从 while 循环中断它的。

所以我找到了答案here .

我学到的是 (Ctrl+Z) char 是某种结束流的信号,它必须在新行上以便 getchar() 返回 EOF。虽然这一切都很好并且有点帮助,但我真的很想知道为什么 EOF 有必要在自己的行上?

最佳答案

您遇到的问题与命令行终端有关,与文件结尾标记本身无关。大多数终端不会在您键入字符时将字符发送给程序,而是会等到您完成整行后再将您键入的内容发送给程序。

您可以通过让输入来自文本文件而不是手动键入来对此进行测试。您应该能够在没有换行符的情况下结束输入文件而不会出现任何问题。

./myprogram.exe < input.txt

顺便说一下,您链接到的答案还指出 EOF 并不是您输入流中实际存在的字符,因此它无法出现在“\n”“之前”。 EOF 只是 getchar 在没有剩余字符可供读取时返回的值。

关于c - 为什么 EOF(文件结尾)在行尾没有 '\n' 之前不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24489630/

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