【问题标题】:c++ text file redirection getline infinite loopc++文本文件重定向getline无限循环
【发布时间】:2018-02-20 10:06:43
【问题描述】:

所以我在使用 cin 读取文本文件时遇到了问题。这是我的代码的基本思想:

while(getline(cin,line) {
cout << line << endl;
}
//Do some task
return 0;

我遇到的问题是循环不会终止并且 //Do some task 永远不会运行。我找到的唯一解决方案是直接查看文本文件,看看有多少行文本,然后硬编码一个条件来打破它。所以说我有一个包含 5 行和一个变量 int 行的文本文件。然后我会做这样的事情:

  while(getline(cin,line) {
cout << line << endl;
if(row == 5) {
break;
}
//Do some task
return 0;

我尝试使用谷歌搜索,但似乎无法在任何地方找到答案。有任何想法吗?而且只有我被允许使用的库是 iostream。

【问题讨论】:

  • 我没有使用 fstream。我正在使用 eclipse,我进入运行配置并重定向 cin 以使用外部文本文件。
  • 我刚刚运行了你的程序的第一个版本,非常适合我。你的文件里有什么?
  • 行初始化为 0 吗?你在哪里增加它?并使用 ifstream 对象
  • 谢谢大家。我设法弄明白了
  • 那是什么?供将来参考..

标签: c++ infinite-loop cin getline


【解决方案1】:

您可以使用 rdbuf 重定向您的 cin 输出 以下链接将为您提供帮助。 http://www.cplusplus.com/reference/ios/ios/rdbuf/

【讨论】:

    【解决方案2】:

    以下代码块应该可以解决您的问题: 归功于作者:kevinchkin http://www.cplusplus.com/forum/beginner/8388/

    #include<iostream>
    #include<fstream>
    
    using namespace std;
    
    int main() {
    
     ifstream myReadFile;
     myReadFile.open("text.txt");
     char output[100];
     if (myReadFile.is_open()) {
     while (!myReadFile.eof()) {
    
    
        myReadFile >> output;
        cout<<output;
    
    
       }
    }
    myReadFile.close();
    return 0;
    }
    

    这是用于读取 .txt 文件的基本模板。我也想不出任何理由你不能只使用 iostream。他们制作其他库是因为 iostream 不是最好的方法。 大多数(如果不是全部)老师/教授都喜欢当学生超越课堂所学内容并尝试学习更多内容时。 如果您需要其他帮助,请查看:http://www.cplusplus.com/doc/tutorial/files/

    【讨论】:

    • 我确实说过模板,并且我确实链接到了我获得代码的位置,希望 RandomGuy 也能看到那里。我在那个帖子中看到的是你必须小心你如何使用 EOF,而不是你不应该。我对这里的代码块的理解是,如果我们不在EOF处,还有另一行,所以去搞定。如果我们在 EOF,不要去抢不存在的东西
    • EOF 只是一个标志,而函数.eof() 只是返回标志的值,所以通过调用.eof(),你不能总是告诉你是否在文件的末尾与否。您可以判断的是,我运行的最后一条语句是否使 EOF 标志为真。而EOF 标志仅在您尝试从文件中读取某些内容并在那里找到文件结尾字符时才获得值true,但您正在从循环主体中的文件中读取,因此,通过使用eof() 在循环条件下使循环多运行一次。
    • 这是一个公平的观点,我在这里学到了一些新东西。但是,添加一个 try/catch 会对此有帮助吗?你可以监听错误,而不是使用错误的数据。我只是不确定依赖错误是否是不好的编码习惯。
    • 另外,EOF 标志是否会算作文件的输入,而不是引发错误?
    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 2021-06-27
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多