正文

[002] scanf读入字符时与回车冲突的处理2006-02-10 22:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/10051.html

分享到:

 <谭>
4.6 scanf函数输入数据的练习


#include <stdio.h>
main()
{
    int a, b;
    float x, y;
    char c1, c2;
    scanf("a=%d b=%d", &a, &b);
    scanf("%f %e", &x, &y);
    scanf("%c %c", &c1, &c2);    
    printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c\n", a, b, x, y, c1, c2);
}

动行结果:
====================================
a=1 b=2↙
1.1 2.2↙
m n↙
a=1,b=2,x=1.100000,y=2.200000,c1=
,c2=m
====================================
原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符

解决方法:
<方法一> 在读字符函数中首位置加入一个空格


#include <stdio.h>
main()
{
    int a, b;
    float x, y;
    char c1, c2;
    scanf("a=%d b=%d", &a, &b);
    scanf("%f %e", &x, &y);
    scanf(" %c %c", &c1, &c2);          /*第一个%c前加入一个空格*/   
    printf(" a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c\n", a, b, x, y, c1, c2);
}


运行结果:
===========================================================
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()"吃掉"前面的回车符.


#include <stdio.h>
main()
{
    int a, b;
    float x, y;
    char c1, c2;
    scanf("a=%d b=%d", &a, &b);
    scanf("%f %e", &x, &y);
    getchar();            /* getchar() 吃掉前面的回车符 */
    scanf("%c %c", &c1, &c2);  
    printf(" a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c\n", a, b, x, y, c1, c2);


结果同上

阅读(6686) | 评论(8)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册