EOF 读取 C/C++

发布于 2024-10-26 05:02:55 字数 470 浏览 8 评论 0原文

我正在使用 NetBeans MinGW 编译简单的 C 程序(我是新手)。 我的问题是我有这个简单的代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int c,i=0;
    while((c=getchar())!=EOF){
        i++;
    }
    printf("%d",i);
    return 0;
}

,当我尝试像这样结束输入时:

你好^Z [输入]

它不起作用,我需要重新输入

^Z[输入]

结束它。

如果您能告诉我为什么会发生这种情况,我将不胜感激。

提前致谢

I'm using NetBeans MinGW to compile simple c programs(I'm new at this).
My problem is that I have this simple code

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int c,i=0;
    while((c=getchar())!=EOF){
        i++;
    }
    printf("%d",i);
    return 0;
}

and when I try to end input like this:

hello^Z [enter]

it doesn't do it, I need to re-enter

^Z[enter]

to end it.

I'd appreciate that you tell me why this happens.

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

却一份温柔 2024-11-02 05:02:55

C 输入默认是面向行的。使用 EOF 字符结束行(Windows 上为 ^Z,Unix 上为 ^D)结束该行(没有尾随换行符),但实际上并不表示文件结束;当下次读取时(即在行的开头)遇到文件结束条件时,将发出信号。

C input is line-oriented by default. Ending a line with the EOF character (^Z on Windows, ^D on Unix) ends the line (without a trailing newline) but doesn't actually signal end of file; the end of file condition is signaled when it's encountered on the next read, i.e. at the beginning of a line.

夜无邪 2024-11-02 05:02:55

就像 UNIX 系统上控制台处理输入

Ctrl-Z 的方式一样,它会是一个中断,让您暂停进程,所以我猜它是一个 Windows 控制台。

当您在字符后按 Ctrl-Z 时,它可能会将其视为“结束”,即 Ctrl-Z 本身。

Just the way the console handles input

Ctrl-Z on a UNIX system would be an interrupt to let you suspend the process, so I guess it is a Windows console.

When you Ctrl-Z after the characters it probably does treat this as an "End" which is Ctrl-Z on its own.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文