c语言scanf首次执行时会多输入一个值,之后就正常了,为什么会有这个BUG?

2024-11-01 01:26:49
推荐回答(2个)
回答1:

  • scanf中\n问题
    scanf("%d\n",&num);
    scanf函数的第一个参数指定了后面变量读取的格式,这样写的话会按照 :
    数字 回车
    的格式读取,读到回车之后会继续读下一行,如果缓冲区没有东西scanf就会阻塞在那里,直到用户有输入以至于有时候会遇到再输入一行才能有返回的情况。

  • 我觉得你可以去了解下scanf()函数的用法和原理:你的程序执行到scanf()时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。

回答2:

你把scanf语句中的\n去掉就好了。
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符;也就是说第三个字符输入时的回车被放弃掉了,直到下一个非空白字符才会匹配到第三个字符;