0

我正在为一个练习编写一个程序,该程序将从文件中读取数据并将其格式化为可读。到目前为止,我有一些代码可以将标题与下面的数据分开。这里是:

int main() {
    ifstream in("records.txt");
    ofstream out("formatted_records.txt");
    vector<string> temp;
    vector<string> headers;
    for (int i = 0; getline(in,temp[i]); ++i) {
        static int k = -1;
        if (str_isalpha(temp[i])) {
            headers[++k] = temp[i];
            temp.erase(temp.begin() + i);
        }
        else {
            temp[i] += "," + headers[k];
        }
    }
}

str_isalpha()只是一个适用isalpha()于字符串中每个字符的函数。)现在,这个程序中的 for 循环没有执行,我不知道为什么。有人知道吗?

编辑:按照建议,我将其更改为

string line;
for (int i = 0; getline(in,line); ++i) {
    temp.push_back(line);

仍然完全跳过 for 循环。

4

2 回答 2

5

vector<string> temp;生成一个向量。然后,当您尝试读入temp[0]时,这是未定义的行为。您应该将一个单独的变量作为getline' 的第二个参数传递,例如在循环之前,然后作为循环体中的第一条指令。stringstring foo;temp.push_back(foo);

于 2010-05-02T01:22:20.917 回答
4

如果在确保您正在读取有效的字符串引用后循环仍然没有运行,那么您应该检查您正在读取的流是否有效。例如,如果文件不存在或者您没有读取它的权限,则流将无效。当流无效时,getline不会读取任何内容。它的返回值是相同的流,当转换为 时bool,它的计算结果为false。在继续之前检查流的状态。

ifstream in("records.txt");
if (!in.is_open()) {
  std::cerr << "Uh-oh.\n";
  return EXIT_FAILURE;
}
于 2010-05-02T01:41:26.210 回答