十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
恩 而且getchar()你也会遇到相同读字符的问题的 fflush()可以解决 以后可能有点麻烦
成都创新互联是一家专注于成都网站建设、成都网站制作与策划设计,金寨网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:金寨等地区。金寨做网站价格咨询:18982081108
你补充说的我查了一下 有点眉目
你说的是先输入4 然后是回车 再依次输入+空格1空格2 回车 对吧 第一次输入时变量正确地得到了赋值 在输入缓冲区中留有一个回车符号(好像每一个输入后都会留有至少一个回车符 其他的字符时输入不正确留下的)
当第二次输入的时候读的指针指向回车符 并且满足第一个要赋值的字符的要求 就将回车符赋值给c
然后检查整型的值是否有 发现时一个加号输入错误 将返回输入正确的字符个数 是1
所以while可以执行 就会打印出第一行
接着循环再执行 剩下的就是加号,空格 ,1,空格,2,回车了。然后就会读取空格 1 和2 了 赋值正确执行后返回赋值符号个数3 while继续执行(为什么+和-会读不出来 我现在也不知道 其他的字符可以用上面的规则做出来)
接着剩下的就是回车 就可以再次读取键盘的数据了 你输入的是*空格3空格4 结果和上面的分析一样
scanf会读取之前input buff里的空格。与getchar等混用容易出现问题。
要么统一全用scanf,要么用getchar()吃掉空格,回车。
其实用c++的cin就好了嘛。
如果scanf函数未按指定格式输入,数据是不会存入到变量中去的,变量还会保持原有的数据。
因为你的程序中,a没有给初值,所以输出了一个随机值50. 你改一下:int a=0,b; 这样,你看到的就会是一直是0了!
你想输入int数据,但输入了一个字符,这个字符会滞留在缓存中,直到缓存被清理。
如果你这条语句在循环中,会遇上出现死循环的现象。
问题的关键是scanf函数的运行机制:
当连续进行数值与字符的输入时,一旦输入的不是数字或小数点,系统就将它解释为字符,赋给了后面的字符变量。
当你用%s输入时,系统是将空格或回车解释为前一项结束,后一项开始,因此可以正确执行程序。
要解决这个问题,你可将字符的输入换成:%s