EOF 读取 C/C++
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
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.就像 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.