繁体   English   中英

C-printf和scanf缓冲区

[英]C - printf and scanf buffer

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

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

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

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刷新缓冲区。

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

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

这应该清除您对scanf的想法

http://home.datacomm.ch/t_wolf/tw/c/getting_input.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM