[問題] 程式出現了預期之外的輸出

看板C_and_CPP作者 (抹茶好喝)時間4年前 (2020/03/12 20:40), 4年前編輯推噓1(1012)
留言13則, 3人參與, 4年前最新討論串1/1
問題(Question): 用cin.eof()時遇到錯誤,輸入時遇到EOF應該終止程式而不繼續運行,但程式卻多輸出一次,想知道為什麼會有錯誤? 餵入的資料(Input): 0 0 5 10 0 8 0 0 5 10 10 5 預期的正確結果(Expected Output): Quick in Nearly 錯誤結果(Wrong Output): Quick in Nearly Nearly 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) #include <iostream> #include <cmath> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); double x1 , x2 , y1 , y2 , r1 , r2 , temp ; while (!cin.eof()) { cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2 ; temp = sqrt (pow (x1 - x2 , 2) + pow (y1 - y2 , 2)); if ((r1 + r2)>=temp) { cout << "Quick in" << endl ; } else if ((r1 + r2) < temp) { cout << "Nearly" << endl ; } } } http://codepad.org/tnRLqQJK 補充說明(Supplement): 這個程式是在寫下面這題 https://toj.tfcis.org/oj/pro/19/ ----- Sent from JPTT on my Samsung SM-G955F. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.11.34.83 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1584016842.A.55D.html

03/12 21:03, 4年前 , 1F
你確定最後多出來那一輪的 cin 有收到資料嗎?
03/12 21:03, 1F
看起來是沒有?

03/12 21:04, 4年前 , 2F
我記得這個 eof() 是在讀到 EOF 後才會返回 true,是用
03/12 21:04, 2F
所以我加了一個!讓它能夠遇到EOF才break

03/12 21:04, 4年前 , 3F
來判斷上次讀取的狀態用的
03/12 21:04, 3F
上次讀取是指什麼呢? index嗎? ※ 編輯: jack41402 (101.11.34.83 臺灣), 03/12/2020 21:05:05

03/12 21:06, 4年前 , 4F
把那個長長的 com >> ... 當成 while 的 condition 應
03/12 21:06, 4F

03/12 21:06, 4年前 , 5F
該就夠了
03/12 21:06, 5F
※ 編輯: jack41402 (101.11.34.83 臺灣), 03/12/2020 21:17:27 ※ 編輯: jack41402 (101.11.34.83 臺灣), 03/12/2020 21:18:49

03/12 21:20, 4年前 , 6F
進迴圈後就是 >> r2 的那次
03/12 21:20, 6F

03/12 21:30, 4年前 , 7F

03/12 21:30, 4年前 , 8F
看文件好了 "Return Value",我中文沒有表達的很清楚QQ
03/12 21:30, 8F
了解了,謝謝你 可是我以前有用過cin.fail()判斷eof,但為什麼只有這次有這個問題 ※ 編輯: jack41402 (101.11.34.83 臺灣), 03/12/2020 22:55:44

03/13 00:24, 4年前 , 9F
重點在於 cin.fail() 等判斷方式都是「上一次是否錯誤」
03/13 00:24, 9F

03/13 00:25, 4年前 , 10F
並沒有「等一下還有沒有東西」這回事
03/13 00:25, 10F

03/13 00:25, 4年前 , 11F
--要知道等一下有沒有東西就真的要等一下看了之後才知道
03/13 00:25, 11F

03/13 00:26, 4年前 , 12F
這一點就連大家說的 while(cin >> ...) 這個判斷也不例外
03/13 00:26, 12F

03/13 00:26, 4年前 , 13F
只不過這是在讀完後馬上判斷它有沒有失敗而已
03/13 00:26, 13F
了解了,謝謝你 ※ 編輯: jack41402 (49.219.145.234 臺灣), 03/13/2020 17:52:37
文章代碼(AID): #1UQYtALT (C_and_CPP)