scanf与回车的冲突

 scanf与回车的冲突
  1. #include <stdio.h>   
  2. main()   
  3. {   
  4.     int a, b;   
  5.     float x, y;   
  6.     char c1, c2;   
  7.     scanf("a=%d b=%d", &a, &b);   
  8.     scanf("%f %e", &x, &y);    
  9.     scanf("%c %c", &c1, &c2);        
  10.     printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);   
  11. }   
运行结果
a=1 b=2↙
1.1 2.2↙
m n↙
a=1,b=2,x=1.100000,y=2.200000,c1=
,c2=m

原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符

解决方法:

<方法一> 在读字符函数中首位置加入一个空格
  1. #include <stdio.h>   
  2. main()   
  3. {   
  4.     int a, b;   
  5.     float x, y;   
  6.     char c1, c2;   
  7.     scanf("a=%d b=%d", &a, &b);   
  8.     scanf("%f %e", &x, &y);    
  9.     scanf("%c %c", &c1, &c2);          /*第一个%c前加入一个空格*/       
  10.     printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);   
  11. }    
运行结果
a=1 b=2↙
1.1 2.2↙
m n↙
a = 1, b = 2, x = 1.100000, y = 2.200000, c1 = m, c2 = n

所加入的空格使第二行尾输入的回车符与该空格符对应,第三行输入的第一个字符就被c1读入了

<方法二> 在第三个函数前加一个getchar函数(包含在stdio.h中)  getchar()"吃掉"前面的回车符.
  1. #include <stdio.h>   
  2. main()   
  3. {   
  4.     int a, b;   
  5.     float x, y;   
  6.     char c1, c2;   
  7.     scanf("a=%d b=%d", &a, &b);   
  8.     scanf("%f %e", &x, &y);    
  9.     getchar();            /* getchar() 吃掉前面的回车符 */  
  10.     scanf("%c %c", &c1, &c2);     
  11.     printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c/n", a, b, x, y, c1, c2);   
  12. }     
结果同上 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值