【问题标题】:Output not printing in the right order输出未按正确顺序打印
【发布时间】:2015-04-17 16:50:15
【问题描述】:

所以我试图从一个文本文件中读取并打印每一行,由两个字符串包围。例如,这是我的程序:

string command;

int main()
{
    while (!cin.eof()) {
        while (getline(cin, command)) {
            cout << "Can't add element : " << command << " : invalid parameter." << endl;
        }
    }  
}

输入文件是每行3个数字的形式,像这样:

1 1 1
2 2 2
5 4 9

所以,输出应该是:

Can't add element : 1 1 1 : invalid parameter.
Can't add element : 2 2 2 : invalid parameter.
Can't add element : 5 4 9 : invalid parameter.

相反,它打印为:

 : invalid parameter.1 1 1
 : invalid parameter.1 2 2
 : invalid parameter.5 4 9

对于我的一生,我无法弄清楚为什么会发生这种情况。有什么帮助吗?

【问题讨论】:

标签: c++ output cout


【解决方案1】:

command 字符串的末尾有一个回车符 (\r)。当它输出到控制台时,它会使输出在行首重新开始。在打印之前剥离字符。

【讨论】:

  • 不知道为什么会这样,我一直认为getline 在以文本模式读取文件时会处理不同的行尾转换。
  • @Raphael 你是对的,这是一个好问题。快速检查显示cin 默认应该是文本模式。
【解决方案2】:

注意文本“:无效参数”。完全覆盖输出中的文本“无法添加元素:”。在 getline() 之后检查你的“命令”字符串,我确定你的最后一个字符是“CR”(ascii 13),所以在写出“命令”字符串后,进一步的输出会在行开头继续。

如果我要推测为什么会发生这种情况,我猜你的终端仿真器会发出“CRLF”,而你的系统只需要“LF”作为行尾字符。

【讨论】:

    【解决方案3】:

    试试下面的方法(它可能对你有帮助)

    int main () {
      string line;
      ifstream myfile ("example.txt");
      if (myfile.is_open()) {
        while ( getline (myfile,line) ) {
    
          cout << "Can't add element : " << line<< " : invalid parameter." << endl;
        }
        myfile.close();
      }
    
      else cout << "Unable to open file"; 
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多