问答

C语言 scanf 缓冲区 行缓冲 fflush

作者:admin 2021-04-19 我要评论

#define _CRT_SECURE_NO_WARNINGS#include stdio.h#include stdlib.hint main(){ int a, b, c, age; float scores; scanf("a=%d,b=%d,c=%d", a, b, c); printf("...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


int main()
{
    int a, b, c, age;
    float scores;
    scanf("a=%d,b=%d,c=%d", &a, &b, &c);
    printf("a+b+c=%d\n\n", (a + b + c));
    fflush(stdin);  // 清空缓冲区
    scanf("age %d score %f.", &age, &scores);
    printf("age=%d, scores=%f.\n", age, scores);
    system("pause");
    return 0;
}

image.png

问题1:输入a=1,b=2,c=3之后,程序运行完了,不会有第二次输入?,但是明明已经fflush(stdin)了。如果注释fflush,也是一样的效果。

问题2:scanf不是行缓冲吗,行缓冲遇到回车时,不是会自动刷新缓冲区的吗,那么不需要fflush应该也可以进行第二次输入的吧?

###

修改如下,第一个字符为换行

    // fflush(stdin); 不需要
    scanf("\nage %d score %f.", &age, &scores);

scanf并不读取最后的换行符号,这个换行符号是下次scanf调用的第一个字符。

    scanf("age %d score %f.", &age, &scores);

上述写法导致scanf在读取到换行后匹配不成功时立即返回,换行和a不匹配。

采用连续输入多个数字用空格分隔,用回车结束,scanf函数会忽略空白字符,不会出现上述问题,代码如下

    scanf("%d %d %d", &a, &b, &c);
    scanf("%d %f", &age, &scores);

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器