简单的 C++ 文件处理程序有问题

问题描述 投票:0回答:1

我的代码没有按预期工作。当我运行程序并尝试输出 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++ file oop overloading file-handling
1个回答
0
投票

您遇到的问题可能是由于从文件读取输入的方式以及 C++ 中“>>”运算符处理空格和换行符的方式造成的。当您使用输入 >> n;在您的运算符函数中,它读取输入直到遇到空格,这意味着它在第一个空格或换行符处停止读取。

在您的文件中,州名“New Hampshire”包含空格。因此,当您编写输入 >> n; 时,它只会读取“New”并停在“Hampshire”之前的空格处。其余行未按预期读取。

要读取状态名称的完整行,您应该使用 getline 而不是“>>”运算符。

© www.soinside.com 2019 - 2024. All rights reserved.