日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++下ctrl+z退出cin输入循环

發布時間:2024/5/14 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++下ctrl+z退出cin输入循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ctrl+z 退出輸入的循環結構

    • 測試的語言及工具
    • for循環
    • while循環
    • do while循環
    • 進一步探究ctrl+z在變量內部儲存為什么
    • 幾天后的繼續

測試的語言及工具

C++
visual studio 2017

for循環

這是我們學校上課提供的C++教材書(C++語言程序設計–劉瑞芳)上的例子,看得我一臉懵逼,于是進行了這次測試
代碼如下

int value=0, sum=0;for (; cin >> value;)sum += value;

測試結果:

while循環

while循環里面總不能什么都不做吧,于是放了個cout<<i
代碼如下

int a[10], i(0);while (cin>>(a[i])) {cout << "i的值為" << i << endl;i++;}

測試結果:

結論:while可以通過ctrl+z結束循環

do while循環

first trying 失敗
代碼如下

int a[10], i(0);cin >> (a[i]);do{cin >> (a[i]);} while (true);

測試結果:

結果分析
while(true)死循環
emmmm貌似不是真正原因,真正原因再與ctrl+z后卡死,不能輸入,也沒有結束,蒙圈
接下來查資料時間,查閱多方資料后發現一個很在理,ctrl+z結束輸入流,Ta說的其他的原因分析就懂不大起了
在另外一些人的資料中還發現個好東西,ctrl+z相當于EOF(別人說的,自己測試了,非也)
也就是說之前的我并沒有理解到ctrl+z退出循環的精髓,其實是輸入后判斷ctrl+z(目前知識水平只允許我這樣理解 啊哈) 所以代碼應該這樣寫:

second trying
代碼如下

int a[10], i(0);cin >> (a[i]);do{cout << "i的值" << i << endl;i++;} while (cin >> (a[i]));

測試結果:

回看for循環再分析
代碼

int value=0, sum=0;for (; cin >> value;)sum += value;

測試結果:

for循環中cin >> (a[i])的位置剛好在判斷退出循環的位置,所以能夠退出循環

回看while循環再分析
測試ctrl+z在變量中的值
代碼如下

int a[10], i(0);while (cin>>(a[i])) {cout << "i的值為" << i << endl;i++;}cout << a[i] << endl;

測試結果:

結果分析
輸出有點奇怪,不急,看樣子有點像隨機數,可以先初始化一下數組的值全部為6(隨便的啦)

a[10] = {6}, i(0);while (cin >> (a[i])) {cout << "i的值為" << i << endl;i++;}cout << a[i] << endl;

測試結果:

emmmm出了點意外,不急,最后一招,visual studio調試界面局部變量窗口查看局部變量的值

基礎不牢地動山搖啊,這樣初始化只會把a[0]初始化為6,其余為0,這下原因就對了
ctrl+z并不會cin到變量

進一步探究ctrl+z在變量內部儲存為什么

cin >> intA方式
代碼如下

int value;cin >> value;cout << value << endl;

測試結果:

結果分析
為隨機數,證明沒有真正輸入進去

cin >> charA方式
代碼如下

char value;cin >> value;cout << value << endl;

測試結果:
結果分析
空白 呃 這就沒辦法了visual studio調試走一波

原來還是沒有輸進去

intA = cin.get() 方式

代碼如下

int value;value=cin.get();cout << value << endl;

測試結果:

出乎意料的結果
再試一下如果是char類型的會是怎樣的結果
代碼如下

char value;value=cin.get();cout << value << endl;

測試結果:

空白?? 這就沒辦法了,emmm今天先試到這里,書屋要關門了 …

幾天后的繼續

前幾天這個cin讀入ctrl+z又出了幺蛾子
代碼如下

#include<iostream> using namespace std; int main() {int space_num = 0, digital_num = 0, character_num = 0;char c;while (c=cin.get())if (c == ' ')space_num++;else if ((c >= '0') && (c <= '9'))digital_num++;else if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'Z')))character_num++;}cout << "空格個數" << space_num << endl;cout << "數字個數" << digital_num << endl;cout << "字母個數" << character_num << endl;system("pause");return 0; }

輸入ctrl+z后死循環,然后呆了幾天沒有進展
直到看了另外一本參考書

試了一下cin.get(ch)
代碼如下

#include<iostream> using namespace std; int main() {int space_num = 0, digital_num = 0, character_num = 0;char c;while (cin.get(c))if (c == ' ')space_num++;else if ((c >= '0') && (c <= '9'))digital_num++;else if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'Z')))character_num++;}cout << "空格個數" << space_num << endl;cout << "數字個數" << digital_num << endl;cout << "字母個數" << character_num << endl;system("pause");return 0; }

一下就正常退出循環了。
看了一下書上的解釋,說是cin將輸入流狀態碼設置成了failbit
感覺更像是將cin狀態碼設置成了eofbit,但在看到源碼之前這些都是我的個人猜測吧
至于為什么一個能退出循環一個不能,我想原因在于一個判斷字符存的值(vs調試局部變量窗口下顯示此時ASCII碼值為-1,奇怪), 一個判斷cin的直接返回值或許在強制類型轉換時,出了問題吧

總結

以上是生活随笔為你收集整理的C++下ctrl+z退出cin输入循环的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。