输出未按正确的顺序打印

Output not printing in the right order

本文关键字:顺序 打印 输出      更新时间:2023-10-16

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

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

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

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

请注意,文本" : 无效参数." 完全覆盖了输出中的文本 "无法添加元素:"。在 getline() 之后检查你的"命令"字符串,我相信你会有"CR"(ascii 13)作为最后一个字符,所以在你的"命令"字符串写出来后,进一步的输出继续在行首。

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

尝试如下操作(可能会对您有所帮助)

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