c语言关于清除缓存区回车的问题 - 爱问答

(爱问答)

c语言关于清除缓存区回车的问题

结构体stud就是学生信息,信息通过函数手动填入,可以不必深究。我的关键问题就在函数这个地方的两个flag,其实函数的其他部分也不必深究。

struct stud

{

    char num[5],name[10];

    int s[4];                             /*s存放4个科目的成绩*/

    double ave;                       /*存放平均成绩*/

};


void readrec()

{

    int i,j;

    struct stud st[3];

    for(i=0;i<3;i++)        /*外循环,读入3个学生的信息*/

    {

        gets(st[i].num);                    /*立个  flag1  */

        gets(st[i].name);

        for(j=0;j<4;j++)               /*内循环,读入一个学生的4个成绩*/

        {

            scanf("%d",&st[i].s[j]);

            st[i].ave+=st[i].s[j]/4.0;

        }

        getchar();                              /*立个  flag2  */

    }

}


main()                            /*main函数也没啥东西,不用看*/

{

    readrec();

    system("pause");

    return(0);

}

flag2这里的解释是“读走留在缓存区内的回车符”,这个我懂,就是在激活scanf函数运行时留下的回车,会被flag1的gets读入(大概是这样吧?)。

那么问题来了,既然某一轮循环中的scanf留下的回车会在下一个新循环中被flag1处gets函数读走,为什么flag1的gets函数没有留下回车?又或者是,为什么flag1留下的回车并没有被紧接着flag1的gets函数读入?

c语言的标准输入函数中

gets/getchar会读取回车的

只有  scanf会把回车留在输入缓冲中

所以你的 flag1 缓冲中中没有回车的

即使有,scanf会跳过它

所以只有当gets/getchar/scanf混用时,才需要读走留在缓存区内的回车符

其实,更好的处理输入缓存区内的回车符的方法不是用

getchar()

而是用

fflush(stdin); //这个才是标准的用法,在 flag2  处


语言编程错误

这个可以认为是下一行吗    是2问题连续读 循环之间需要排序吗?就是休息号

相关标签:c语言

下一篇:为什么我的电脑会突然这样,而且会自动重启

上一篇:java99乘法表,用FOR实现下面这个形状。

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?