为什么我的代码没有解释就终止了?

时间:2016-05-20 12:25:24

标签: c++ debugging c++11

我在过去几年没有碰过它后再次学习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());
    }
}

2 个答案:

答案 0 :(得分:2)

根据您所描述的内容,听起来stdout在程序结束前没有被刷新。那是不寻常的;通常,stdout会自动设置为行缓冲操作,在这种情况下,只要遇到换行符就会刷新它。

您最好的选择是遵循@ NathanOliver的建议并使用cout << ...而不是printfprintf命令是C的回归,您正在使用C ++编译器和C ++功能。事实上,你甚至不包括printf通常所需的标题,所以即使编译我也有些惊讶。

FWIW,如果您选择继续使用printf,可以尝试在最后手动刷新stdout,如下所示:

fflush(stdout);

答案 1 :(得分:0)

您的应用程序可以执行以下操作:

应用程序将暂停在getline()(10次)(因为getline阻止执行),然后它将执行一些for循环,打印并结束(可能关闭控制台窗口)。如果你在最后添加一些东西来阻止执行(例如cin.get(),等待按下回车键),你会看到结果(因为应用程序不会终止)。如果您在程序结束后没有删除输出的地方运行代码,您将看到打印的内容。