在调试模式下运行此代码时:
#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
在调试模式下运行此代码时:
#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
似乎问题是由在运行之前GDB
写入stdin
以下行引起的scanf
:
18-list-thread-groups -- 可用
并将scanf("%d%d%d", &a, &b, &c);
该行解释为 int 而不是等待用户输入。
我使用的当前解决方案是stdin
在程序开始时使用:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
我知道这是一种 hack,但我搜索了一个多小时的解决方案,但我找不到任何解决方案。我希望这可以帮助别人。
我有同样的问题。发现如果使用换行符或使用输入函数,则必须清除输出缓冲区。所以,这样做..
#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;
}