gpt4 book ai didi

c++ - getline() 无法处理重定向的 Linux 标准输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:06 25 4
gpt4 key购买 nike

我正在我的电脑上调试一个文件。我没有使用键盘输入,而是像这样运行程序:

./main < input.txt

我的程序中有一段代码如下所示:

do {
cout << "Type \"STOP\" when done: ";
getline(cin, myString);
cout << endl;
if (myString == "STOP") {
break;
}
cout << "Input next line: " << endl;
getline(cin, myString2);
cout << endl;

// do something with the two strings

} while (myString != "STOP");

当文件中有一行等于 "STOP"(无引号)时,它不会停止,而是一直循环下去。早些时候,有一个 cin >> myInt,但我确保在每次调用后都使用 cin.ignore()。如果我在不重定向的情况下键入值,它会工作正常。

这是输出:

Type "STOP" when done:
Type "STOP" when done:
Type "STOP" when done:
Type "STOP" when done:
Type "STOP" when done:
Type "STOP" when done:
Type "STOP" when done:
...

请帮我弄清楚这是怎么回事!

最佳答案

好的,我想通了!正如 Basile Starynkevitch 所建议的那样,问题不在于我的代码,而在于输入文件。我在我的 Windows 笔记本电脑上编写输入文件并从 Linux VM 运行它,并且对导致错误的 DOS 行结尾有一些混淆。

因为 Windows 以 \r\n 终止它们的行,而 *nix 仅以 \n 终止它们,所以 cin.ignore()忽略 \r 而不是 \n,它被读入 getline()

解决方案:只需在 Linux 中编写输入文件,或在您选择的编辑器中使用“unix”行结尾(通常类似于 View -> Line Endings -> Unix)

诅咒你该死的“标准”开发者!

关于c++ - getline() 无法处理重定向的 Linux 标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40734495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com