获得观察到的行为的原因是,当连接到终端时,标准输入默认情况下是行缓冲的,而终端本身是行缓冲的.
因此,前scanf()
个请求来自stdin
的输入,这导致来自终端的读请求直到通过按Enter键输入换行符时才返回.
然后,scanf()
可以读取和转换第一个数字3
,使 4 5 -1\n
在stdin
缓冲器中挂起.
scanf()
设置num
到3
并返回1
到main
函数,printf()
输出3
和换行符,
循环继续,第二个scanf()
调用读取数字4
,并打印出来...
下一个数字5
也是如此...
对scanf()
的最后一个调用读取-1
,这会导致循环以break
语句结束,程序退出到shell .
如果您使用Enter键而不是空格栏,则终端将很快返回到scanf()
,并且Enter键被击中后将立即显示数字.