【问题标题】:Why doesn't this for-loop execute?为什么这个for循环不执行?
【发布时间】:2010-05-02 01:18:18
【问题描述】:

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

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 循环。

【问题讨论】:

  • getline 参数中是逗号吗?
  • 是的,这就是在函数中分离参数的方式,不是吗?

标签: c++ for-loop getline


【解决方案1】:

vector&lt;string&gt; temp; 创建一个 empty 向量。然后,当您尝试读入temp[0] 时,这是未定义的行为。您应该将一个单独的string 变量作为getline 的第二个参数传递给循环之前的string foo;,然后将temp.push_back(foo); 作为循环主体中的第一条指令。

【讨论】:

    【解决方案2】:

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

    ifstream in("records.txt");
    if (!in.is_open()) {
      std::cerr << "Uh-oh.\n";
      return EXIT_FAILURE;
    }
    

    【讨论】:

    • 谢谢,原来是这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多