解决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); printf("Enter rate:"); scanf(" %lf",&rate); 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); 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; }
|
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; }
|