gpt4 book ai didi

c++ - 为什么我的 ifstream 中出现无限循环?

转载 作者:行者123 更新时间:2023-11-27 23:14:53 24 4
gpt4 key购买 nike

我学习了 C++。在我的简单代码下方,但我在下一行代码中遇到了问题:

while(is >> p) vp.push_back(p); // TODO: here I have a problem...

在指定的行中,我收到了无限循环。为什么会发生?我希望得到 'eof'(即 !is)并退出循环。

/*
main.cpp
© AB, 10/06/2013
Chapter 10, Exercise 1.
*/
//-------------------------------------------------------------------------------------------------
#include <exception>
#include <iostream>
#include <string>
#include <vector>
#include<fstream>
using namespace std;
// Some structure...
struct Point{
int x, y;
Point(int xx, int yy): x(xx), y(yy){}
Point(): x(0), y(0) {}
};
ostream& operator << (ostream& os, const Point& p){
os << p.x << ',' << p.y;
return os;
}
istream& operator >> (istream& is, Point& p){
char ch;
int x,y;
if((cin >> x >> ch >> y) && ch == ',') p = Point(x,y);
return is;
}
//=================================================================================================
int main()
try{
vector<Point> vp;
Point p;
while(cin){
// Get some data...
cout << "x,y: ";
cin >> p;
if(cin) vp.push_back(p);
}
// print
for(int i = 0; i < vp.size(); ++i) cout << vp[i] << ' ';
cin.clear();
string s;
// save to file
cout << endl << "Output file name: ";
if(!(cin >> s)) throw runtime_error("Invalid output file name.");

{ // create output stream
ofstream os(s.c_str());
if(!os) throw runtime_error("Can't open file: " + s);
for(int i = 0; i < vp.size(); ++i) os << vp[i] << ' ';
} // here ofstream erased

cout << "Read back..." << endl;
vp.clear();
ifstream is(s.c_str()); // create input stream
if(!is) throw runtime_error("Can't open file: " + s);
while(is >> p) vp.push_back(p); // TODO: here I have a problem...
for(int i = 0; i < vp.size(); ++i) cout << vp[i] << ' '; // print
}
catch(exception& e){
cerr << e.what() << endl;
return 1;
}
catch(...){
cerr << "Unknown exception." << endl;
return 2;
}

谢谢。

最佳答案

因为在您的 operator >> (istream& is, Point& p) 中,您使用的是 cin 而不是 is

你总是会得到一个无限循环,因为在你运行循环之前 is 是好的,并且循环不会改变 is

关于c++ - 为什么我的 ifstream 中出现无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com