EOF的使用

本文深入探讨了C++中使用scanf读取字符串时需要按两次Ctrl+z才能退出的原因,解释了EOF的概念,并通过实例演示了如何正确使用EOF结束程序。同时,对比了不同输入类型(如字符串、数字)在退出机制上的差异,揭示了背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.我疑惑了

	char a[20];
	while(scanf("%s",a)!=EOF){
		cout<<"hello"<<endl;
	}


为什么要按两下ctrl+z 才能结束呢??


2.小插曲奋斗

http://zhidao.baidu.com/link?url=-2b2_s5futoSJOVPW4Q0_n2wsH5lvJxKvFe1PqZP0rY8EtF9dznVeTbTzSIuTFBJmkkZwPxMB2HtxOML3vDP7a

难过教你怎么用EOF结束程序:

scanf("%c%c%c"a,b,c);
if('a'=='E'&&'b'=='O'&&'c'=='F')
return 0;


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


问题算是找到答案了!

摘自

http://zhidao.baidu.com/link?url=Agbl2C1hwi1ibscwvzj6g40SRGgvIbySqNRNwuG7dJsS9IDFESagYuxjMpS9NK9UiOwGQBQw1GdMJ28yG1dxtYLj7nRXMwE1kB0J8bauYpm&from=commentSubmit#answers1576898808


当以%s输入字符串时需要按两次(ctrl+z)才能退出!!


当以%d输入数字是一次(ctrl+z)就可以退出了


这是为什么啊??



提问者采纳

这是vc6的 bug,因为getchar无此问题,%d无此问题,gcc无此问题。。。。 一个类似的bug(微软已经确认):http://bbs.linuxpk.com/home-space-uid-3973-do-blog-id-11952.html可以参考下。。。
提问者评价
谢谢!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值