输出未按正确顺序打印

时间:2015-04-17 16:50:15

标签: c++ output cout

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

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

对于我的生活,我无法弄清楚为什么会这样。有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

您的command字符串末尾有一个回车符(\r)。当它输出到控制台时,它会在行的开头重新开始输出。在打印之前去除角色。

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

尝试类似下面的内容(可能对您有帮助)

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;
}