【发布时间】:2016-11-22 05:36:59
【问题描述】:
我正在调试计算机上的文件。我没有使用键盘输入,而是像这样运行程序:
./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:
...
请帮我弄清楚发生了什么!
【问题讨论】:
-
我应该补充一点,我也试过
getline(cin, throwAwayString)而不是cin.ignore(),但无济于事。 -
myString 是字符串还是字符数组?
-
@Eugene 是来自 C++ 标准库的字符串,和我在上一条评论中试过的
throwAwayString一样 -
编译所有警告和调试信息(例如
g++ -Wall -Wextra -g)然后使用调试器(gdb)找出myString的值。仔细阅读documentation -
@BasileStarynkevitch 使用gdb,第一次显示
myString是"",然后在输入中被关闭了一个