CLion-printf在scanf前却先运行scanf后运行printf的解决方案
在上C语言课程时碰到了一些问题,明明printf在scanf前却先运行scanf后运行printf,接下来讲讲具体问题与解决方案。
源代码(老师给的“斐波那契数列前n项的输出”的标准答案):
#include <stdio.h>
int main()
{
int num1 = 1;
int num2 = 1;
int tmp = 0;
int i = 0;
int n;
printf("请输入一个数");
scanf("%d", &n);
if (n < 3)
{
return 1;
}
else
{
for (i = 0; i<n-2; i++)
{
tmp = num1 + num2;
num1 = num2;
num2 = tmp;
}
printf("%d",tmp);
}
return 0;
}
问题:run与debug的运行结果不一致
当博主使用CLion的run来运行代码时,终端结果显示如下:
请输入一个数8
21
而当博主使用CLion的debug来运行时,终端结果显示如下:
8
请输入一个数21
解决方案:使用fflush(stdout)
博主的解决方式是在printf()
与scanf()
之间加上fflush(stdout)
,成功解决问题。
关于fflush(stdout)
的使用,具体可以参考寰宇C++的博客。
修改后的代码
#include <stdio.h>
int main()
{
int num1 = 1;
int num2 = 1;
int tmp = 0;
int i = 0;
int n;
printf("请输入一个数");
fflush(stdout);
scanf("%d", &n);
if (n < 3)
{
return 1;
}
else
{
for (i = 0; i<n-2; i++)
{
tmp = num1 + num2;
num1 = num2;
num2 = tmp;
}
printf("%d",tmp);
}
return 0;
}
个人博客:https://tzq0301.github.io/