使用scanf读入,误读回车,造成流内无效字符占位解决/C

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XGL1569348/article/details/68488965

问题就是,scanf获取了自己的要的东西之后,就关闭了输入流,’\n’就占据了流的第一位,下次再调用scanf的时候,再次打开输入流,第一个符合条件进来的是’\n’ 就读了走人再关闭流。就会导致一次输入两次运行。

  • 使用scanf(" %c",...) ,效果为读掉多余的空格换行TAB符。

  • 使用scanf("%c%*c",.....)增加一个%*c。%*c可以抛弃一个输入的量,在这里面,可以把\n给接受并抛弃。

  • 下一行使用getchar(),将\n读掉。

  • 下一行使用fflush(stdin),把输入流里的东西冲掉。

注意输入语句的操作逻辑,回车只不过是一个开启读取console输入内容的开关,直接对流进行操作,获得所要的东西就关闭,不抛弃后面的内容。常规读取语句并不受回车影响,而是将其当做一个普通字符。

猜你喜欢

转载自blog.csdn.net/XGL1569348/article/details/68488965