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