输出未按正确顺序打印
Output not printing in the right order
所以我试图从文本文件中读取并打印每一行,并用两个字符串包围。例如,这是我的程序:
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
字符串末尾有一个回车 return 字符 (\r
)。当它输出到控制台时,它会在行首重新开始输出。在打印之前去除字符。
试试下面的方法(可能对你有帮助)
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;
}
请注意文本“:参数无效。”完全覆盖输出中的文本 "Can't add element : "。在 getline() 之后检查你的 'command' 字符串,我确定你会有 'CR' (ascii 13) 作为最后一个字符,所以在你的 'command' 字符串写完之后,进一步输出在行首继续。
如果我要推测为什么会发生这种情况,我猜你的终端仿真器会发出 'CRLF',而你的系统只需要 'LF' 作为行尾字符。
所以我试图从文本文件中读取并打印每一行,并用两个字符串包围。例如,这是我的程序:
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
字符串末尾有一个回车 return 字符 (\r
)。当它输出到控制台时,它会在行首重新开始输出。在打印之前去除字符。
试试下面的方法(可能对你有帮助)
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;
}
请注意文本“:参数无效。”完全覆盖输出中的文本 "Can't add element : "。在 getline() 之后检查你的 'command' 字符串,我确定你会有 'CR' (ascii 13) 作为最后一个字符,所以在你的 'command' 字符串写完之后,进一步输出在行首继续。
如果我要推测为什么会发生这种情况,我猜你的终端仿真器会发出 'CRLF',而你的系统只需要 'LF' 作为行尾字符。