编程问题(C语言)变量i,j,k已定义为int型并有初值0,用语句“scanf(“%d,&i”);

编程问题(C语言)变量i,j,k已定义为int型并有初值0,用语句“scanf(“%d,&i”);scanf(“%d”,&j);scanf(“%d”,&k);”进行输入,当执行输入语句时,从键盘输入12.3 4 5,则i,j,k的值分别是12,0,0,为什么?(为什么不是12 4 5)

第1个回答  2014-11-05
输入缓冲区……类似于一个先进先出栈
执行给I赋值时,给i赋值12,但是12.5毕竟不是整数,那么,就在输入缓冲区产生了一个异常数据
当读取的时候,如果不把这个异常去掉,就不能再次输入信息,再次输入的信息都会卡在这个异常后面(比如火车卡在在山洞出口,虽然卡住的是第一节的一部分,但是我是不可能先让第二节第三节出来的,相让给第二节出来就必须先把第一节的残留给清除了……)
解决方法很简单,直接每次执行完一天输入语句后都再执行一次晴空缓冲区语句是最安全的方法~~当然,方法可能还有别的,你可以慢慢研究下~~追问

可是如果语句是scanf(“%d%d%d”,&r,&j,&k)不就可以正常输出了么

sorry,i打成r了

第2个回答  推荐于2016-08-04
只有前一个scanf语句在起作用,后两个scanf语句都没有输入。当你输入12.3 4 5的时候,按回车,就开始执行scanf语句输入12.3 4 5遇到12.3后边的空格就停止了,4和5就落下了。直接执行后边的两个scanf语句,执行后边的scanf语句时没有输入为0。
如果输入为12.5回车4回车5回车就可以把三个数存入,也就可以输出三个数。追问

可是第一次输入回车难道不会直接终止输入么

一条scanf中数据可以以tab,空格,回车三种形式间隔,分成多条scanf时只有回车是有效间隔是这个意思么

追答

是的

本回答被提问者采纳