C++下ctrl+z退出cin输入循环
ctrl+z 退出輸入的循環結構
- 測試的語言及工具
- for循環
- while循環
- do while循環
- 進一步探究ctrl+z在變量內部儲存為什么
- 幾天后的繼續
測試的語言及工具
C++
visual studio 2017
for循環
這是我們學校上課提供的C++教材書(C++語言程序設計–劉瑞芳)上的例子,看得我一臉懵逼,于是進行了這次測試
代碼如下
測試結果:
while循環
while循環里面總不能什么都不做吧,于是放了個cout<<i
代碼如下
測試結果:
結論:while可以通過ctrl+z結束循環
do while循環
first trying 失敗
代碼如下
測試結果:
結果分析
while(true)死循環
emmmm貌似不是真正原因,真正原因再與ctrl+z后卡死,不能輸入,也沒有結束,蒙圈
接下來查資料時間,查閱多方資料后發現一個很在理,ctrl+z結束輸入流,Ta說的其他的原因分析就懂不大起了
在另外一些人的資料中還發現個好東西,ctrl+z相當于EOF(別人說的,自己測試了,非也)
也就是說之前的我并沒有理解到ctrl+z退出循環的精髓,其實是輸入后判斷ctrl+z(目前知識水平只允許我這樣理解 啊哈) 所以代碼應該這樣寫:
second trying
代碼如下
測試結果:
回看for循環再分析
代碼
測試結果:
for循環中cin >> (a[i])的位置剛好在判斷退出循環的位置,所以能夠退出循環
回看while循環再分析
測試ctrl+z在變量中的值
代碼如下
測試結果:
結果分析
輸出有點奇怪,不急,看樣子有點像隨機數,可以先初始化一下數組的值全部為6(隨便的啦)
測試結果:
emmmm出了點意外,不急,最后一招,visual studio調試界面局部變量窗口查看局部變量的值
基礎不牢地動山搖啊,這樣初始化只會把a[0]初始化為6,其余為0,這下原因就對了
ctrl+z并不會cin到變量
進一步探究ctrl+z在變量內部儲存為什么
cin >> intA方式
代碼如下
測試結果:
結果分析
為隨機數,證明沒有真正輸入進去
cin >> charA方式
代碼如下
測試結果:
結果分析
空白 呃 這就沒辦法了visual studio調試走一波
原來還是沒有輸進去
intA = cin.get() 方式
代碼如下
int value;value=cin.get();cout << value << endl;測試結果:
出乎意料的結果
再試一下如果是char類型的會是怎樣的結果
代碼如下
測試結果:
空白?? 這就沒辦法了,emmm今天先試到這里,書屋要關門了 …
幾天后的繼續
前幾天這個cin讀入ctrl+z又出了幺蛾子
代碼如下
輸入ctrl+z后死循環,然后呆了幾天沒有進展
直到看了另外一本參考書
試了一下cin.get(ch)
代碼如下
一下就正常退出循環了。
看了一下書上的解釋,說是cin將輸入流狀態碼設置成了failbit
感覺更像是將cin狀態碼設置成了eofbit,但在看到源碼之前這些都是我的個人猜測吧
至于為什么一個能退出循環一個不能,我想原因在于一個判斷字符存的值(vs調試局部變量窗口下顯示此時ASCII碼值為-1,奇怪), 一個判斷cin的直接返回值或許在強制類型轉換時,出了問題吧
總結
以上是生活随笔為你收集整理的C++下ctrl+z退出cin输入循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中带参数的try(){}语法含义
- 下一篇: C++---数字三角形模型---最低通行