C语言使用scanf读取字符数组按回车无法提交输入的问题
问题原因解释
你遇到的输入异常完全是scanf格式字符串中额外添加的\n导致的,这是C标准库输入函数的固有行为:
- C标准规定,
scanf格式字符串中的任意空白字符(包括空格、\t制表符、\n换行符),都会指示函数连续跳过输入流中所有的空白字符,直到匹配到第一个非空白字符才会终止当前匹配逻辑 - 你输入完字符串按下回车时,输入流传入的是
\n空白字符,刚好被格式串末尾的\n匹配到,scanf会持续等待后续输入,直到你输入任意非空白字符后才会结束本次读取,这就是你需要二次输入才能提交的原因。
修复方案
直接删除scanf格式串末尾的\n即可,修改后的对应代码行如下:
scanf("%s", name);
额外优化建议
- 你定义的
name数组长度为21,使用%s读取字符串时建议增加长度限制,避免输入过长导致缓冲区溢出,修改为:
这里的scanf("%20s", name);%20s表示最多读取20个非空白字符,剩余1个位置留给字符串末尾的结束符\0,符合数组长度要求。 - 代码中使用的
conio.h和getch()是Windows平台特有的非标准库实现,如果后续需要编写跨平台代码,可以替换为标准库的getchar()函数。
内容的提问来源于stack exchange,提问作者Pyromagne
相关产品推荐
相关产品推荐

