在while中使用cin>>a?為條件及注意事項說明
在while中使用cin>>a 為條件
用一個題目來解釋
本題為統(tǒng)計輸入多少個連續(xù)數(shù)字
#include<iostream>
using namespace std;
int main()
{
int currVal = 0 , val = 0;
if(cin >> currVal)
{
int cnt=1;//統(tǒng)計次數(shù)
while(cin >> val)
{
if(currVal == val)
{
cnt++;
}
else{
cout << currVal <<" occurs "<<cnt<<" times "<<endl;
currVal = val;
cnt=1;//重新計算另一個
}
} //while循環(huán)結(jié)束
cout << currVal <<" occurs "<<cnt<<" times "<<endl;//打印最后一個數(shù)
}//if循環(huán)結(jié)束
return 0;
}有一個要注意的地方,以前不理解在while里面用cin >> val是什么意思,用這個當(dāng)條件的話,通過檢測其流的狀態(tài)來判斷結(jié)束;
(1)若流是有效的,即流未遇到錯誤,那么檢測成功;
(2)若遇到文件結(jié)束符,或遇到一個無效的輸入時(例如本題輸入的值不是一個整數(shù)),istream對象的狀態(tài)會變?yōu)闊o效,條件就為假;
怎樣才是文件結(jié)束符呢?
不同的操作系統(tǒng)有不同的約定,在windows系統(tǒng)中,輸入文件結(jié)束符的方法是先按Ctrl+Z,然后再按Enter;在UNIX系統(tǒng)中,包括Mac OS X系統(tǒng)中,文件結(jié)束輸入為Ctrl+D;
下面是兩個輸入實例圖片,請對比
1.這個直接按enter,最后一個4顯然沒有輸入進(jìn)去,程序讀不到最后一個數(shù),程序一直保持輸入的狀態(tài);

2.這個是正確實例,上面的Z是按了ctrl的效果

while(cin>>a) cin輸入直到回車結(jié)束
經(jīng)常遇到循環(huán)輸入,直到符合某種條件時結(jié)束輸入。
cin>>s是有返回值的,只要s滿足類型條件,就會return true,一直執(zhí)行下去,而cin會忽略空格或者enter,因此,enter后不會結(jié)束循環(huán)。只能ctrl+Z。
其實很簡單
通過get()判斷下一個輸入是不是回車就行。
while(cin>>a){
...
if(cin.get()=='\n') break;
} 舉個例子
#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)建鏈表舉一個例子
#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;
}運行結(jié)果:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言靜態(tài)版通訊錄的設(shè)計與實現(xiàn)
靜態(tài)版通訊錄是一種簡單的通訊錄實現(xiàn)方式,通過定義固定的數(shù)組大小來存儲聯(lián)系人信息。該方法不支持動態(tài)增刪聯(lián)系人,但具有實現(xiàn)簡單、易于理解的優(yōu)點。在程序設(shè)計中,需注意數(shù)組邊界溢出等問題2023-04-04
C++實現(xiàn)LeetCode(103.二叉樹的之字形層序遍歷)
這篇文章主要介紹了C++實現(xiàn)LeetCode(103.二叉樹的之字形層序遍歷),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C語言通過三步翻轉(zhuǎn)法實現(xiàn)單詞倒置詳解
這篇文章主要為大家分享了用三步翻轉(zhuǎn)法將一句話的單詞進(jìn)行倒置的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-05-05

