關於判斷輸入結束

2021-09-30 08:20:02 字數 2228 閱讀 8051

我們平時在oj上提交題目的時候,輸入可以在while後面的小括號裡處理,由於c++的流會自動判斷檔案的結尾,操作起來很簡單,如下題:

problem description

calculate a + b.

input

each line will contain two integers a and b. process to end of file.

output

for each case, output a + b in one line.

sample input

1 1sample output 2

我們只需要這樣寫就可以:

#include

using namespacestd;

intmain()

但如果我們的輸入非常麻煩,不想在while後面的小括號裡進行判斷呢,那麼可以像下面這樣寫:

#include

using namespacestd;

intmain()

return1;

}

我想這種方法需要掌握,有時候會讓你很方便。比如有一道題,輸入的開始是個3*3的陣列,假設陣列為a[3][3],並且對於每個a[i][j]我們都需要進行某個判斷,那麼怎麼處理檔案尾的問題?

當然我們可以這樣

while(cin>>a[0][0])

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)}}

可以是可以,但是可以看到有多麻煩了,而用上面的方法就大大不一樣了,高效一些,更重要的是美觀太多了,如下:

while(1)

}if(!cin.good()) break; }

原理:以下內容**csdn部落格

需要連續從標準輸入讀取資料時,可以採用下面兩種不同的方式判斷檔案結束:

int i;  

while(scanf("%d",&i) != eof)  

while(cin >> i)  

首先看scanf,當成功讀取時返回讀取的項的數目,如:scanf("%d %d",&i,&j)返回2,scanf("%d %f %s",&i, &f, c)返回3。這個數目可以是你希望讀取的項數,也可能小於希望讀取的項數,在匹配失敗時返回0(如:用scanf("%d",&i)接收整數而輸入是英文本母時就返回0)。需要注意的是用while(scanf("%d",&i) != eof)時,接收到像876652098643267843超過int型取值範圍的數時迴圈也會繼續執行;相同的情況出現在while(cin >> i)上時迴圈會立即結束。

cin >>返回值的型別是basic_istream&,代表cin的位址。在ios.**件中定義了型別轉換函式:

operator void *() const   

有這個函式定義後,需要時ios型別轉換成void*型別。而在讀入發生錯誤時返回0。

在對乙個流物件進行i/o操作發生錯誤時,錯誤的型別被記錄在ios類的乙個資料成員中。

ios類中定義的描述錯誤狀態的常量:

goodbit-------------沒有錯誤,正常狀態 

eofbit---------------到達流的結尾

failbit---------------i/o操作失敗,清除狀態字後,可以對流繼續進行操作。

badbit--------------試圖進行非法操作,清除狀態字後,流可能還可以使用。

hardfail------------致命錯誤,不可恢復的錯誤。

對應於這些位,可用ios中定義的如下函式來檢查流的當前狀態位:

int good()---------如果正常,返回非0值

int bad()-----------如果badbit被設定,返回非0值

int eof()------------如果eofbit被設定,返回非0值

int fail()------------如果failbit被設定,返回非0值

int rdstate()------返回當前錯誤狀態位.

c之輸入陣列判斷結束

從剛接觸 到現在,見過各種各樣的輸入要求,比如 1.輸入一行數字,以 1為結束 2.輸入字串,以回車結束 3.輸入10個數字 等等有時候就是這些基本的輸入問題,阻撓了解題的腳步 其他的暫時沒有想到,今天嘗試了一下將一串數字輸入進陣列,以 1結束 例項 int array 1000 int i 0 w...

判斷輸入是否結束(不給定輸入個數,oj常見)

while cin x 輸出str或ch時會發現,str是乙個空字串,而ch是乙個換行符。出現這種情況的原因是,當我們在輸入完a和b並按下鍵的時候,實際上這個回車符被gets或getchar讀取了。全部只用scanf或者全部只用gets的話是不會出現這個問題的 解決該問題,我們應該 while sc...

python在演算法題中判斷輸入結束 EOF

有些演算法題是這樣要求的,一行輸入一行資料,然後沒有規定我要輸入多少行,你要自行判斷檔案結束eof,否則是會runtime error的,因為oj內部都是用檔案來進行讀寫的。例如a b,每一行輸入a b,計算a b的結果。一般這種嘛,c c 很簡單了,就是scanf判斷一下 eof就完事了,但是py...