C-printf和scanf缓冲区

Sendobren

我对通用标题感到抱歉,但没有找到更好的选择。我很抱歉,如果问题很愚蠢,但我是新手,因此找不到任何有用的方法。

我已经编写了这段代码来解决一个简单的问题:您有一个以负号结尾的正整数序列:对于每个整数,您都必须打印相应数量的*字符并换行。

该代码可以正常工作,但是我无法真正理解为什么。

int main()
{
    int d=0,i;
    while (d>=0){
        scanf("%d",&d);
        for (i=0;i<d;i++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

我做了一些研究,并且了解到终端scanf仅在按回车键时才给出整数序列我认为这样可以工作:

  • scanf 获取整数序列,它注册第一个整数,而其他整数则被丢弃
  • 打印*对应于第一个整数s的数量

相反,似乎scanf读取第一个整数,然后将printf将其发送到缓冲区,然后循环重新启动并scanf获取第二个整数,依此类推。当到达最后一个正整数时,printf将刷新缓冲区。

我错了吗?如果没有,为什么它会这样工作?

chux-恢复莫妮卡

scanf()确实读取第一个整数,然后printf将其发送到缓冲区,然后循环继续,scanf获取第二个整数,依此类推。达到负整数之后,其余的stdin将被忽略stdout与每个冲洗,\n程序结束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章