zoukankan      html  css  js  c++  java
  • scanf的一个问题(暂未解决)

    如下代码,没有按照预想的那样运行:

        int a;
        char b;
    
        printf("input a integer
    ");
        scanf("%d", &a);
        
        printf("input a char
    ");
        //scanf("%1s",&b);
        scanf("%c",&b);
    
        printf("%d,%c
    ",a,b );

    运行的结果如下,并没有机会输入char字符,输入int后,回车直接就显示了。

    ----------------------------------------------------------------------------

    原因分析:

    输入int数值后,回车,此时连同回车一起进入了缓冲区,而b获取字符变成了回车符。

    解决方案:

    重点是要忽略到回车。

    (1)用函数fflush(stdin)清除全部剩余内容 ==>OK

    (2)用"%1s"来限制 ==>OK

    (3)用getchar()清除

    (4)用格式串中空格或"%*c"来"吃掉" 

    方法一:

        int a;
        char b;
    
        printf("input a integer
    ");
        scanf("%d", &a);
        
        printf("input a char
    ");
        fflush(stdin);
        scanf("%c",&b);
    
        printf("%d,%c
    ",a,b );


    方法二:

     %1s 读长度为1的字符串,因此前面的空格,回车都会过滤掉。

        int a;
        char b;
    
        printf("input a integer
    ");
        scanf("%d", &a);
        
        printf("input a char
    ");
        scanf("%1s",&b);
    
        printf("%d,%c
    ",a,b );

     运行结果:

    但程序结束报错:

    修改如下即可:

    将b定义为字符数组(字符串)

        int a;
        char b[2];
    
        printf("input a integer
    ");
        scanf("%d", &a);
        
        printf("input a char
    ");
        scanf("%1s",&b);
     
        printf("%d,%c
    ",a,b[0]);

    方法三、

      

  • 相关阅读:
    js 鼠标事件大全
    ASP.NET 解决重复提交问题
    C# 统计函数运行时间
    DataGrid 、Repeater、DataList、GridView自动编号列
    两种时间格式正则表达式HH:mm 和HH:mm:ss
    SQL Server2008 新语法
    XYTipsWindow 2.8
    MSSQL 清空日志
    SQL 日期格式化大全
    HDOJ 2132
  • 原文地址:https://www.cnblogs.com/qingxinlangjing/p/3248528.html
Copyright © 2011-2022 走看看