不厭徐何 2023-03-18 12:47 采纳率: 56.5%
浏览 38
已结题

scanf输入getchar输入时读缓冲区问题

如果输入45 56 78回车,不应该一次输出45 56 78空格空格回车吗,输入45回车56
回车78回车,就一次输出45 56 78回车huichehuiche,但是运行的时候不是这样的


    int a,b,c;
    fflush(stdin);
    scanf("%d%d%d",&a,&b,&c);
    printf("%d %d %d",a,b,c);
    char d,e,f;
    scanf("%c%c%c",&d,&e,&f);
    printf("%c %c %c",d,e,f);
/*    d=getchar();               //与上面2行的scanf和printf等价
    e=getchar();
    f=getchar();
    putchar(d);
    putchar(e);
    putchar(f);    
*/  
  • 写回答

3条回答 默认 最新

  • a5156520 2023-03-18 13:44
    关注

    因为scanf使用%d读取整数时,会把前面的空白字符略去,然后读完整数后,再把后面的非数字字符放回输入流;

    所以,输入45 56 78回车,首先会把45,56,78依次读取到a,b,c,同时数之间的两个空格被忽略了,再把回车放回输入流,然后等待输入两个字符,就打印一个回车,然后是输入的两个字符;

    同理,如果输入,45回车56回车78回车,同样是获取了46,56,78到变量a,b,c中,数之间的两个回车同样被忽略了,然后把最后一个回车放回输入流,等待输入两个字符,再打印回车,然后是输入的两个字符。

    测试代码如下:

    参考链接:


    #include <stdio.h>
    
    int main(void){
         
        int a,b,c;
        fflush(stdin);
        scanf("%d%d%d",&a,&b,&c);
        printf("%d %d %d\n",a,b,c);
        char d,e,f;
        scanf("%c%c%c",&d,&e,&f);
    //    printf("%c %c %c",d,e,f);
        printf("d=%c,d=%d\n",d,d);
        printf("d=%c,d=%d\n",e,e);
        printf("d=%c,d=%d\n",f,f);
    /*    d=getchar();               //与上面2行的scanf和printf等价
        e=getchar();
        f=getchar();
        putchar(d);
        putchar(e);
        putchar(f);    
    */  
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么