我正在尝试使用Eclipse调试我用C ++编写的程序。 该程序包括从用户获取输入,但当我输入控制台的输入时,它将不会继续运行代码(它将继续要求输入)。 我不能在没有修复这个问题的情 谢谢。
代码卡在while循环fgets上:
int main(int argc, const char**argv) {
FILE* inputFile = NULL;
setlocale(LC_ALL, "");
if(argc == 2){
inputFile = fopen(argv[1], "r");
if (inputFile == NULL){
printf("Problem opening file %s, make sure correct path name is given.\n", argv[1]);
return 0;
}
}
else {
inputFile = stdin;
}
char buffer[MAX_STRING_INPUT_SIZE];
// Reading commands
while ( fgets(buffer, MAX_STRING_INPUT_SIZE, inputFile) != NULL ) {
fflush(stdout);
if ( parser(buffer) == error ){
printf("ERROR\n");
break;
}
};
fclose(inputFile);
return 0;
}
答案 0 :(得分:7)
问题来自Eclipse缓冲控制台输入。 修复它的一种方法是使用Windows / DOS本机控制台强制Eclipse进行调试。
该程序详见here,但简要说明:
答案 1 :(得分:0)
我知道Eclipse控制台缓冲区并不总能正常工作 - 根据我的经验,这在使用C或C ++时是最糟糕的。
如果您想在Eclipse中运行已编译的代码,这将极大地帮助,但不会消除您在Eclipse中可能遇到的显示问题:
setvbuf(stdout, NULL, 0, _IONBF);
但是,我不知道在使用stdin
时这会如何影响Eclipse中的调试。您的最佳选项是使用Nicolas's answer来运行DOS控制台。多一点工作,但我相信就足够了。
请注意,在通过Eclipse运行代码时,上面的行应该仅才能使用,以便拥有某种理智的输出缓冲区,而不需要几个混乱的代码内变通方法。在编译实际使用时,此行需要注释掉。