Ctrl+z并不会产生一个普通的ASCII码值,也就是说它不会产生一个字符,不会被放到输入缓冲区中,所以读不到它,你输入了就好像木有输入一样,它只能作为结束循环来用。
还有在Windows系统中,只有按下回车才会去检测之前有没有按下Ctrl+z,才会去检测流是否结束。就是在按下回车之前,输入缓冲区并不能检测到是否有Ctrl+z按下,所以即使按了Ctrl+z,照样还可以从键盘去输入内容,但是Ctrl+z这行输入的内容到时候并不会被读取到,因为在缓冲区检测时,如果检测到Ctrl+z(结束标志),就会认为输入流结束了,那么后边的内容就不会被读进去,而被丢掉。
cin>>a返回也是一个stream,所以while()就是判断这个stream的状态,鉴于你的a是int类型,因此上面的while循环,退出的方法有2个:
1) 输入任意一个非int类型的值,比如字母s或符号!什么的都可退出循环,继续执行。
2)标准的EOF,在Windows上面就是ctrl-c,xNix上是ctrl-d。