解决scanf读取回车

解决scanf读取回车

一、问题

对于两个连续的scanf中,下一个scanf读取了上一个scanf输入的回车键

导致程序无法正常进行

eg:这是一个计算年利率的程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
int main()
{
int money,year;
double rate,sum;
printf("Enter money:");
scanf("%d",&money);
printf("Enter year:");
scanf("%d",&year);
printf("Enter rate:");
scanf("%lf",&rate);
sum=money*pow(1+rate,year);
printf("sum = %.2f\n",sum);

return 0;
}

会得到

1
2
3
Enter money:
1000
Enter year:

二、解决方法

1.添加一个空格

利用空格创造一个缓冲区,将上一个的scanf的回车输入缓存区中,使下一个scanf不读取这个回车

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
int main()
{
int money,year;
double rate,sum;
printf("Enter money:");
scanf("%d",&money);
printf("Enter year:");
scanf(" %d",&year); //注意%d前面的空格
printf("Enter rate:");
scanf(" %lf",&rate); //注意%d前面的空格
sum=money*pow(1+rate,year);
printf("sum = %.2f\n",sum);

return 0;
}

2.利用//fflush(stdin)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
int main()
{
int money,year;
double rate,sum;
printf("Enter money:");
scanf("%d",&money);
//fflush(stdin);
printf("Enter year:");
scanf("%d",&year);
//fflush(stdin);
printf("Enter rate:");
scanf("%lf",&rate);
sum=money*pow(1+rate,year);
printf("sum = %.2f\n",sum);

return 0;
}

3.使用%1s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
int main()
{
int money,year;
double rate,sum;
printf("Enter money:");
scanf("%d",&money);
printf("Enter year:");
scanf("%1s",&year); //不知道是不是这样的,以后有空问老师
printf("Enter rate:");
scanf("%lf",&rate);
sum=money*pow(1+rate,year);
printf("sum = %.2f\n",sum);

return 0;
}

解决scanf读取回车
http://example.com/2025/10/24/解决scanf读取回车/
作者
王柏森
发布于
2025年10月24日
许可协议