我的代码没有按预期工作。当我运行程序并尝试输出 n (在 ABC 行上)时,程序在屏幕上仅显示“New”。为什么程序不读取文件的其余部分?任何帮助将不胜感激。谢谢
#include <iostream>
#include <fstream>
using namespace std;
class stateData{
private:
string name, capital;
int area, admissionYear, admissonOrder;
public:
friend ifstream& operator>>(ifstream& input, stateData &state);
friend ostream& operator<<(ofstream& output, stateData &state);
};
ifstream& operator >>(ifstream &input, stateData &state){
string name, capital,n;
int area, admissionYear, admissionOrder;
input >> n;
input>>capital;
input>>area;
input>>admissionYear;
input>>admissionOrder;
state.name=n;
cout << n; // LINE ABC
}
int main(){
stateData states[50];
string n;
ifstream infile;
ofstream outfile;
int hashTable[101];
infile.open("Ch9_Ex8_data.txt");
if (infile.fail()){
cout << "Sorry, file could not be opened. ";
exit(0);
}
for (int i=0; i<50; i++){
infile>> states[i];
}
}
}
以下是文件的内容:“
New Hampshire
Concord
9304 1788 9
Massachusetts
Boston
8257 1788 6
...
您遇到的问题可能是由于从文件读取输入的方式以及 C++ 中“>>”运算符处理空格和换行符的方式造成的。当您使用输入 >> n;在您的运算符函数中,它读取输入直到遇到空格,这意味着它在第一个空格或换行符处停止读取。
在您的文件中,州名“New Hampshire”包含空格。因此,当您编写输入 >> n; 时,它只会读取“New”并停在“Hampshire”之前的空格处。其余行未按预期读取。
要读取状态名称的完整行,您应该使用 getline 而不是“>>”运算符。