scanf("\n");置于scanf("%[^\n]%*c", s);之前的作用是什么?
代码中
scanf("\n");的作用解释 先梳理代码的输入流程,才能明白这行的作用:
- 第一步
scanf("%c",&ch);:读取单个字符,但用户输入字符后会按回车,此时输入缓冲区里会留下换行符\n。 - 第二步
scanf("%s",&str);:%s格式会自动跳过开头的空白字符(包括上面残留的\n),读取到下一个空白字符为止(比如用户输入字符串后按回车,又会留下一个\n在缓冲区)。 - 到这里,输入缓冲区里还留着
scanf("%s")执行后剩下的换行符,如果直接执行scanf("%[^\n]%*c",s);,%[^\n]的规则是读取所有非换行符的字符,但此时缓冲区第一个字符就是\n,会直接匹配失败,导致s无法读取到任何内容。
而scanf("\n");的核心作用就是:清空输入缓冲区中残留的空白字符(主要是之前操作留下的换行符)。因为scanf格式字符串里的\n会匹配任意数量的空白字符(包括换行、空格、制表符),直到遇到第一个非空白字符才停止,这样后面的%[^\n]就能正常读取用户输入的整行内容了。
内容的提问来源于stack exchange,提问作者MAHAVISHNU G
相关产品推荐
相关产品推荐

