在while中使用cin>>a?為條件及注意事項(xiàng)說明
在while中使用cin>>a 為條件
用一個(gè)題目來解釋
本題為統(tǒng)計(jì)輸入多少個(gè)連續(xù)數(shù)字
#include<iostream> using namespace std; int main() { int currVal = 0 , val = 0; if(cin >> currVal) { int cnt=1;//統(tǒng)計(jì)次數(shù) while(cin >> val) { if(currVal == val) { cnt++; } else{ cout << currVal <<" occurs "<<cnt<<" times "<<endl; currVal = val; cnt=1;//重新計(jì)算另一個(gè) } } //while循環(huán)結(jié)束 cout << currVal <<" occurs "<<cnt<<" times "<<endl;//打印最后一個(gè)數(shù) }//if循環(huán)結(jié)束 return 0; }
有一個(gè)要注意的地方,以前不理解在while里面用cin >> val是什么意思,用這個(gè)當(dāng)條件的話,通過檢測(cè)其流的狀態(tài)來判斷結(jié)束;
(1)若流是有效的,即流未遇到錯(cuò)誤,那么檢測(cè)成功;
(2)若遇到文件結(jié)束符,或遇到一個(gè)無效的輸入時(shí)(例如本題輸入的值不是一個(gè)整數(shù)),istream對(duì)象的狀態(tài)會(huì)變?yōu)闊o效,條件就為假;
怎樣才是文件結(jié)束符呢?
不同的操作系統(tǒng)有不同的約定,在windows系統(tǒng)中,輸入文件結(jié)束符的方法是先按Ctrl+Z,然后再按Enter;在UNIX系統(tǒng)中,包括Mac OS X系統(tǒng)中,文件結(jié)束輸入為Ctrl+D;
下面是兩個(gè)輸入實(shí)例圖片,請(qǐng)對(duì)比
1.這個(gè)直接按enter,最后一個(gè)4顯然沒有輸入進(jìn)去,程序讀不到最后一個(gè)數(shù),程序一直保持輸入的狀態(tài);
2.這個(gè)是正確實(shí)例,上面的Z是按了ctrl的效果
while(cin>>a) cin輸入直到回車結(jié)束
經(jīng)常遇到循環(huán)輸入,直到符合某種條件時(shí)結(jié)束輸入。
cin>>s是有返回值的,只要s滿足類型條件,就會(huì)return true,一直執(zhí)行下去,而cin會(huì)忽略空格或者enter,因此,enter后不會(huì)結(jié)束循環(huán)。只能ctrl+Z。
其實(shí)很簡(jiǎn)單
通過get()判斷下一個(gè)輸入是不是回車就行。
while(cin>>a){ ... if(cin.get()=='\n') break; }
舉個(gè)例子
#include <bits/stdc++.h> using namespace std; int b[10]; int main() { int i=0,a; while(cin>>a){ b[i++]=a; if(cin.get()=='\n') break; } for(i=0;i<10;i++) cout<<b[i]<<" "; }
這里再以創(chuàng)建鏈表舉一個(gè)例子
#include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; int main() { ListNode* head1 = new ListNode(NULL); ListNode* head = new ListNode(NULL); head1 = head; int a; while (cin >> a) { ListNode* tmp = new ListNode(a); head->next = tmp; head = tmp; if (cin.get() == '\n') break; } while (head1->next != NULL) { cout << head1->next->val<<endl; head1 = head1->next; } system("pause"); return 0; }
運(yùn)行結(jié)果:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Matlab實(shí)現(xiàn)嗅覺優(yōu)化算法的示例代碼
嗅覺劑優(yōu)化是一種新穎的優(yōu)化算法,旨在模仿氣味分子源尾隨的藥劑的智能行為。本文將利用Matlab實(shí)現(xiàn)這一智能優(yōu)化算法,需要的可以參考一下2022-05-05如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議
本文主要介紹了如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議,對(duì)C語言和web感興趣的同學(xué),可以詳細(xì)看下,并且試驗(yàn)一下。2021-05-05Qt中const?QString轉(zhuǎn)換?char?*可能的坑
本文主要介紹了Qt中const?QString轉(zhuǎn)換?char?*可能的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07C數(shù)據(jù)結(jié)構(gòu)循環(huán)鏈表實(shí)現(xiàn)約瑟夫環(huán)
這篇文章主要介紹了C數(shù)據(jù)結(jié)構(gòu)循環(huán)鏈表實(shí)現(xiàn)約瑟夫環(huán)的相關(guān)資料,需要的朋友可以參考下2017-05-05