Scanf连续调用多次并且存在%c的问题

来源:互联网 发布:js查找字符串中字符 编辑:程序博客网 时间:2024/06/02 00:00

问题现象:

当程序中存在多个scanf时,针对第一个scanf的输入,一般用户会以空白字符(空格、换行、tab、换页符)等结束。但若后面有一个scanf(“%c”,&ch),则刚才输入的空白字符会被此次的scanf读入,因此空白字符也是一个字符,此将导致ch为空。

原因解释:

scanf的工作原理:(一般情况,即格式串中没有其它字符)用户的任何输入将被保存在缓冲之中,当有scanf时,scanf则从此缓冲队列中读取字符,直至遇到空白字符或者是此字符不可能是本次的输入为止,并把此字符放回原队列,此字符成为队列的第一个字符。当下一次scanf被调用时,将从第一个字符读取,若此时为%d,%f,%g,%e等数据格式串,则可跳过空白字符,直至出现数字为止;若此时为%c等字符(串)格式串,则会把空白字符读入,并给此变量赋值。


上述问题可以使用scanf(“ %c”,&ch)解决。


点击打开链接

0 0
原创粉丝点击