VS Code中scanf期望额外输入值的原因咨询
问题解答:为什么程序需要输入两个值才执行完成?
嘿,这个问题的根源完全出在你写的scanf("%d\n", &alter);这行代码里!让我给你拆解清楚:
核心原因:scanf格式字符串里的\n在搞鬼
scanf对格式字符串里的空白字符(包括\n、空格、制表符)有特殊处理:它会让scanf持续跳过输入中的所有空白内容,直到遇到一个非空白字符才会停止等待输入。
具体到你的执行流程:
- 程序输出
Your age:后,调用scanf等待输入。 - 你输入
1并按下回车,此时输入缓冲区里是1\n。scanf先读取1(匹配%d的要求),然后开始处理格式字符串里的\n——它会跳过所有空白,包括你刚输入的换行,这时候它还在等待非空白字符出现。 - 当你再输入
2并按下回车,scanf终于看到了非空白的2,这才结束这次scanf调用,但注意:它并没有读取这个2,只是用它来终止空白匹配。所以最终alter变量里存的还是第一个输入的1,程序接着执行printf输出结果。
快速解决方法
把scanf的格式字符串里的\n删掉,改成:
scanf("%d", &alter);
这样scanf读取完数字后,会自动忽略后续的空白(%d默认会跳过前导空白,也会在读取数字后停止,不会纠结后续的换行),输入一次数字加回车就能正常执行了。
额外小提示
如果之后你的程序需要读取字符类输入(比如getchar()或者scanf("%c", ...)),可能需要手动处理输入缓冲区里剩下的换行符,但这个问题场景里暂时不需要考虑~
内容的提问来源于stack exchange,提问作者atelten
相关产品推荐
相关产品推荐

