作者jack41402 (抹茶好喝)
看板C_and_CPP
标题[问题] 程式出现了预期之外的输出
时间Thu Mar 12 20:40:40 2020
问题(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1584016842.A.55D.html
1F:→ Schottky: 你确定最後多出来那一轮的 cin 有收到资料吗? 03/12 21:03
看起来是没有?
2F:→ Lipraxde: 我记得这个 eof() 是在读到 EOF 後才会返回 true,是用 03/12 21:04
所以我加了一个!让它能够遇到EOF才break
3F:→ Lipraxde: 来判断上次读取的状态用的 03/12 21:04
上次读取是指什麽呢?
index吗?
※ 编辑: jack41402 (101.11.34.83 台湾), 03/12/2020 21:05:05
4F:→ Lipraxde: 把那个长长的 com >> ... 当成 while 的 condition 应 03/12 21:06
5F:→ Lipraxde: 该就够了 03/12 21:06
※ 编辑: jack41402 (101.11.34.83 台湾), 03/12/2020 21:17:27
※ 编辑: jack41402 (101.11.34.83 台湾), 03/12/2020 21:18:49
6F:→ Lipraxde: 进回圈後就是 >> r2 的那次 03/12 21:20
8F:→ Lipraxde: 看文件好了 "Return Value",我中文没有表达的很清楚QQ 03/12 21:30
了解了,谢谢你
可是我以前有用过cin.fail()判断eof,但为什麽只有这次有这个问题
※ 编辑: jack41402 (101.11.34.83 台湾), 03/12/2020 22:55:44
9F:推 LPH66: 重点在於 cin.fail() 等判断方式都是「上一次是否错误」 03/13 00:24
10F:→ LPH66: 并没有「等一下还有没有东西」这回事 03/13 00:25
11F:→ LPH66: --要知道等一下有没有东西就真的要等一下看了之後才知道 03/13 00:25
12F:→ LPH66: 这一点就连大家说的 while(cin >> ...) 这个判断也不例外 03/13 00:26
13F:→ LPH66: 只不过这是在读完後马上判断它有没有失败而已 03/13 00:26
了解了,谢谢你
※ 编辑: jack41402 (49.219.145.234 台湾), 03/13/2020 17:52:37