Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114443
  • 博文数量: 24
  • 博客积分: 1226
  • 博客等级: 中尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-11 20:47
文章分类

全部博文(24)

文章存档

2011年(2)

2010年(4)

2009年(5)

2008年(13)

我的朋友

分类: C/C++

2009-03-09 15:25:57

scanf与回车的冲突
  1. #include    
  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    
  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    
  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. }     
结果同上 
阅读(2095) | 评论(0) | 转发(0) |
0

上一篇:双子座~~

下一篇:restrict volatile限定符

给主人留下些什么吧!~~