流结束模拟的小问题,顺便散分

时间:2022-05-08 17:34:33

int main()
{
char i;
while((i = cin.get()) != EOF)
{
cout<<i<<endl;
}
return 0;


使用ctrl+z模拟流结束时,出现此种现象,还请知道的人不吝赐教,分多无用,顺便散了,见者有分。
123^Z456
1
2
3
  

输入123 ctrl+z 456 回车。最后那个箭头怎么来的,整形是26,为什么是箭头?

17 个解决方案

#1


sf
JF

#2


jf

#3


先JF

#4


晕,自己先顶。有没有牛来啊。。。。

#5


VC6而且没打sp6补丁?

#6


我用的是VS2008

#7


jf

#8


因为流结束的比较标准的方法是回车-ctrl-z-回车。
否则,后果未可知。
你应该注意到你的程序并不能自己结束吧。

#9


不清楚
JF

#10


引用 8 楼 taodm 的回复:
因为流结束的比较标准的方法是回车-ctrl-z-回车。 
否则,后果未可知。 
你应该注意到你的程序并不能自己结束吧。

ctrl+z是阻塞方式的检验,即需要回车之后才能够出现效果。
(1)如果ctrl+z之前没有任何的输入,这时输入ctrl+z才起到将EOF写入到缓冲区中。进而使得get()读取并返回。
(2)如果ctrl+z有任何的输入,这时候的作用是使得ctrl+z之前的数据写入缓冲区,而使得ctrl+z之后的数据采取无视的态度。(ctrl+z的效果1)
这其中就有在第二种情况之中,系统是怎么对待ctrl+z的,这里似乎是将箭头写入到缓冲区之中去了。(ctrl+z的效果2)
当所有输入的有效数据输出之后,系统等待下一次输入,也就是你讲的程序并没有结束。
令我很费解的就是为什么会是箭头,无语啊。

#11


为什么不是箭头呢?你用wxdevcpp编译试一下就知道了。

#12


估计和操作系统和编译器有关吧

#13


jf

#14


gcc
vc6.0测试  
123^Z456 




并没有->

#15


ok,感谢各位。初步估计,又是一个与编译器有关的问题。

#16


等高人

#17


丐帮少帮主来接分!

#1


sf
JF

#2


jf

#3


先JF

#4


晕,自己先顶。有没有牛来啊。。。。

#5


VC6而且没打sp6补丁?

#6


我用的是VS2008

#7


jf

#8


因为流结束的比较标准的方法是回车-ctrl-z-回车。
否则,后果未可知。
你应该注意到你的程序并不能自己结束吧。

#9


不清楚
JF

#10


引用 8 楼 taodm 的回复:
因为流结束的比较标准的方法是回车-ctrl-z-回车。 
否则,后果未可知。 
你应该注意到你的程序并不能自己结束吧。

ctrl+z是阻塞方式的检验,即需要回车之后才能够出现效果。
(1)如果ctrl+z之前没有任何的输入,这时输入ctrl+z才起到将EOF写入到缓冲区中。进而使得get()读取并返回。
(2)如果ctrl+z有任何的输入,这时候的作用是使得ctrl+z之前的数据写入缓冲区,而使得ctrl+z之后的数据采取无视的态度。(ctrl+z的效果1)
这其中就有在第二种情况之中,系统是怎么对待ctrl+z的,这里似乎是将箭头写入到缓冲区之中去了。(ctrl+z的效果2)
当所有输入的有效数据输出之后,系统等待下一次输入,也就是你讲的程序并没有结束。
令我很费解的就是为什么会是箭头,无语啊。

#11


为什么不是箭头呢?你用wxdevcpp编译试一下就知道了。

#12


估计和操作系统和编译器有关吧

#13


jf

#14


gcc
vc6.0测试  
123^Z456 




并没有->

#15


ok,感谢各位。初步估计,又是一个与编译器有关的问题。

#16


等高人

#17


丐帮少帮主来接分!