在带有GDB的Eclipse CDT中,Scanf似乎无法在调试模式下工作

时间:2012-08-26 00:14:00

标签: c gdb eclipse-cdt scanf

在调试模式下运行此代码时:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("Values entered: %d %d %d\n", a, b, c);
    return EXIT_SUCCESS;
}

程序不会请求任何用户输入,只会输出:

  

输入值:18 78 2130026496

2 个答案:

答案 0 :(得分:3)

问题似乎是由GDBstdin运行之前写入scanf以下行引起的:

  

18-list-thread-groups -available

并且scanf("%d%d%d", &a, &b, &c);将该行解释为int而不是等待用户输入。

我使用的当前解决方案是使用以下方法清除程序开头的stdin

int ch;
while ((ch = getchar()) != '\n' && ch != EOF);

我知道这是一种黑客攻击,但我搜索了一个多小时的解决方案,我找不到任何解决方案。我希望这有助于某人。

答案 1 :(得分:1)

我遇到了同样的问题。想象一下,如果使用换行符或使用输入函数,则必须清除输出缓冲区。所以,这样做..

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c;
    fflush(stdout);//Clears the stdout buffer
    scanf("%d%d%d", &a, &b, &c);
    printf("Values entered: %d %d %d\n", a, b, c);
    return EXIT_SUCCESS;
}