我在过去几年没有碰过它后再次学习c ++,而且我遇到了一个我似乎无法弄清楚的特殊错误。
当我运行下面的代码时,它将接受我预期的10个输入,但是在第一个for
循环之后,程序退出。我在gdb
中运行它以尝试找出问题,但它报告说该过程“正常退出”。
我使用g++ -std=c++11
#include <iostream>
#include <string>
using namespace std;
int main() {
//User inputs
string input[10];
//Get the inputs
for(int i = 0; i < 10; i++) {
//Get this input
printf("%i> ", i);
getline(cin, input[i]);
}
//The application does not make it to this point
//Collected
printf("Thank you for submitting your data.\n");
//Print inputs
for(int a = 0; a < 10; a++) {
//Show the input
printf("%i> %s\n", a, input[a].c_str());
}
}
答案 0 :(得分:2)
根据您所描述的内容,听起来stdout在程序结束前没有被刷新。那是不寻常的;通常,stdout会自动设置为行缓冲操作,在这种情况下,只要遇到换行符就会刷新它。
您最好的选择是遵循@ NathanOliver的建议并使用cout << ...
而不是printf
。 printf
命令是C的回归,您正在使用C ++编译器和C ++功能。事实上,你甚至不包括printf
通常所需的标题,所以即使编译我也有些惊讶。
FWIW,如果您选择继续使用printf
,可以尝试在最后手动刷新stdout,如下所示:
fflush(stdout);
答案 1 :(得分:0)
您的应用程序可以执行以下操作:
应用程序将暂停在getline()
(10次)(因为getline
阻止执行),然后它将执行一些for循环,打印并结束(可能关闭控制台窗口)。如果你在最后添加一些东西来阻止执行(例如cin.get()
,等待按下回车键),你会看到结果(因为应用程序不会终止)。如果您在程序结束后没有删除输出的地方运行代码,您将看到打印的内容。