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。