Linux与Windows关于标准输入中涉及EOF的处理方式

程序:

#include <stdio.h>
void main()
{
	int c = getchar();
	int i = 0;
	while (c != EOF) 
	{
		putchar(c);
		c = getchar();
		i++;
	}
	if (feof(stdin)) 
	{
		printf(" End of file reached.%d", i);
	}
	else 
	{
		printf(" Something went wrong.");
	}
}
在window下,在行尾加Ctrl+Z并且enter后并不会结束程序的运行,而只会将Ctrl+Z当成一个字符来解释,并且将在输入缓冲区中存储的本行数据输出。
要结束输入必须在新的一行(输入enter迫使输出"标准输入"缓存区之后)使用Ctrl+Z。


在linux下,可以在输入enter迫使输出"标准输入"缓存区之后,在新行按Ctrl-D结束输入,这种方法类似于windows的处理方式。也可以在行尾连续两次键入Ctrl-D。


相关解析:

Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF。
如果在一行结束时按下Ctrl-D,则表示输出"标准输入"缓存区,所以这时再按一次Ctrl-D就代表EOF,从而就可以结束输入;
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。
注:Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。

Windows中,在新的一行(输入enter迫使输出"标准输入"缓存区之后)开头按下Ctrl-Z表示EOF;如果真的想输入Ctrl-Z,在非行开头的地方输入Ctrl-Z即可,在windows中不能将Ctrl-Z表示为行首字符


所以两种平台下,都需要先输出“标准输入”缓存区,然后才能用特殊的方法来代表EOF

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值