程序中使用EOF,运行时ctrl+z不能结束

a347499531 2013-02-26 08:30:05

//统计从输入大文件结尾为止的字符数
#include<stdio.h>

int main(void)
{
int total = 0;

puts("请输入字符,键入两次ctrl+z结束,或换行后键入一次ctrl+z结束");
while(getchar() != EOF)
{
total++;
}

printf("输入的字符中,共有字符数%d个。\n", total);

return 0;
}


编译运行后,
输入
abcde[ctrl+z]
程序不会结束,还是继续等待输入;
用的是VS2010编译的。
...全文
2074 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guard_hao 2015-04-30
  • 打赏
  • 举报
回复
Ctrl+Z也不起作用
guard_hao 2015-04-30
  • 打赏
  • 举报
回复
我也遇到类似的问题了 #include<stdio.h> #include<string.h> int main(void) { char c; int space = 0, table = 0, enter = 0; printf_s("please enter a string :\n"); scanf_s("%c", &c,1); while (c !=EOF) { switch (c) { case 32: space++; break; case 9: table++; break; case 10: enter++; break; default: break; } scanf_s("%c",&c,1); } printf_s("the number of space: %d\n", space); printf_s("the number of table: %d\n", table); printf_s("the number of enter: %d\n", enter); return 0; }
赵4老师 2015-04-30
  • 打赏
  • 举报
回复 1
Linux:Ctrl+D Windows:Enter,Ctrl+Z,Enter
huangkui201310 2015-04-30
  • 打赏
  • 举报
回复
懂了,你们看看那这个eof的定义: 在计算机术语缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。EOF EOF 在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。 是文件或者字符串的结束标志,好像没有手动输入
huangkui201310 2015-04-30
  • 打赏
  • 举报
回复
c语言好像ctrl+z就是-1的说,为什么会这样了,那什么可以结束呢
mewiteor 2015-04-30
  • 打赏
  • 举报
回复
引用 14 楼 mewiteor 的回复:
#include<stdio.h>
#include<conio.h>
int main()
{
	int c;
	while((c=getch())!='0')
		printf("0x%02x\n",(unsigned int)c);
	return 0;
}
测得 Ctrl-A~Ctrl-Z为1~26 F1~F10为0x00 0x3b~0x00 0x44,F11为0xe0 0x85,F12为0xe0 0x86 Shift-F1~Shift-F10为0x00 0x54~0x00 0x5d,F11为0xe0 0x87,F12为0xe0 0x88 Ctrl-F1~Ctrl-F10为0x00 0x5e~0x00 0x67,F11为0xe0 0x89,F12为0xe0 0x8a Alt-F1~Alt-F10为0x00 0x68~0x00 0x71,F11为0xe0 0x8b,F12为0xe0 0x8c Page Up为0xe0 0x49,Page Down为0xe0 0x51 Home为0xe0 0x47,End为0xe0 0x4f Insert为0xe0 0x52,Delete为0xe0 0x53 ↑为0xe0 0x48,←0xe0 0x4b,→0xe0 0x4d,↓0xe0 0x50 Ctrl-Page Up为0xe0 0x86,Ctrl-Page Down为0xe0 0x76 Ctrl-Home为0xe0 0x77,Ctrl-End为0xe0 0x75 Ctrl-Insert为0xe0 0x92,Ctrl-Delete为0xe0 0x93 Ctrl-↑为0xe0 0x8d,Ctrl-←0xe0 0x73,Ctrl-→0xe0 0x74,Ctrl-↓0xe0 0x91 Alt-Page Up为0x00 0x99,Alt-Page Down为0x00 0xa1 Alt-Home为0x00 0x97,Alt-End为0x00 0x9f Alt-Insert为0x00 0xa2,Alt-Delete为0x00 0xa3 Alt-↑为0x00 0x98,Alt-←0x00 0x9b,Alt-→0x00 0x9d,Alt-↓0x00 0xa0 然而
#define EOF     (-1)
所以键盘上的按键的值没有等于EOF的。
没注意是getchar,又试了一下getchar,Ctrl-Z回车后是-1 + 回车,Ctrl-C直接是-1,
一根烂笔头 2015-04-30
  • 打赏
  • 举报
回复 1
ctrl+D/C/\都试试
mewiteor 2015-04-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<conio.h>
int main()
{
	int c;
	while((c=getch())!='0')
		printf("0x%02x\n",(unsigned int)c);
	return 0;
}
测得 Ctrl-A~Ctrl-Z为1~26 F1~F10为0x00 0x3b~0x00 0x44,F11为0xe0 0x85,F12为0xe0 0x86 Shift-F1~Shift-F10为0x00 0x54~0x00 0x5d,F11为0xe0 0x87,F12为0xe0 0x88 Ctrl-F1~Ctrl-F10为0x00 0x5e~0x00 0x67,F11为0xe0 0x89,F12为0xe0 0x8a Alt-F1~Alt-F10为0x00 0x68~0x00 0x71,F11为0xe0 0x8b,F12为0xe0 0x8c Page Up为0xe0 0x49,Page Down为0xe0 0x51 Home为0xe0 0x47,End为0xe0 0x4f Insert为0xe0 0x52,Delete为0xe0 0x53 ↑为0xe0 0x48,←0xe0 0x4b,→0xe0 0x4d,↓0xe0 0x50 Ctrl-Page Up为0xe0 0x86,Ctrl-Page Down为0xe0 0x76 Ctrl-Home为0xe0 0x77,Ctrl-End为0xe0 0x75 Ctrl-Insert为0xe0 0x92,Ctrl-Delete为0xe0 0x93 Ctrl-↑为0xe0 0x8d,Ctrl-←0xe0 0x73,Ctrl-→0xe0 0x74,Ctrl-↓0xe0 0x91 Alt-Page Up为0x00 0x99,Alt-Page Down为0x00 0xa1 Alt-Home为0x00 0x97,Alt-End为0x00 0x9f Alt-Insert为0x00 0xa2,Alt-Delete为0x00 0xa3 Alt-↑为0x00 0x98,Alt-←0x00 0x9b,Alt-→0x00 0x9d,Alt-↓0x00 0xa0 然而
#define EOF     (-1)
所以键盘上的按键的值没有等于EOF的。
赵4老师 2013-02-27
  • 打赏
  • 举报
回复
引用 5 楼 wushishuihuo 的回复: 先按下[Enter],然后新一行中再按[Ctrl+Z][Enter]
猪头小哥 2013-02-27
  • 打赏
  • 举报
回复
另起一行,Ctrl+Z,再enter。
碎碎念 2013-02-27
  • 打赏
  • 举报
回复
试试ctrl+c。。。
自信男孩 2013-02-27
  • 打赏
  • 举报
回复
引用 2 楼 a347499531 的回复:
引用 1 楼 cfjtaishan 的回复:在Linux应该是按ctrl+d,而在windows应该是按ctrl+z吧~ 我都说在VS2010编译了。。。Linux没VS吧。。
好吧,我错了。~
mymtom 2013-02-27
  • 打赏
  • 举报
回复
在一行的开头按Ctrl+Z(或者F6),然后按回车
Stinson_Zhao 2013-02-27
  • 打赏
  • 举报
回复
先按下[Enter],然后新一行中再Ctrl+Z
lm_whales 2013-02-27
  • 打赏
  • 举报
回复
^Z^Z就可以了
AnYidan 2013-02-26
  • 打赏
  • 举报
回复 1
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
图灵狗 2013-02-26
  • 打赏
  • 举报
回复
CTRL+C/CTRL+D/CTRL+Z都可以试一下,不同的系统对EOF的定义不同。
a347499531 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
在Linux应该是按ctrl+d,而在windows应该是按ctrl+z吧~
我都说在VS2010编译了。。。Linux没VS吧。。
自信男孩 2013-02-26
  • 打赏
  • 举报
回复
在Linux应该是按ctrl+d,而在windows应该是按ctrl+z吧~

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧