s1E14为什么两个结果不同
……do
{
sum = sum + num;
status = scanf("%f", &num);
} while (getchar() != '\n' && status == 1);
……
……
do
{
status = scanf("%f", &num);
sum = sum + num;
} while (getchar() != '\n' && status == 1);
……
可以看出这两个代码区别是运算操作和赋值操作的循序不一样
第一段代码先运算,如果num和sum在前面没有定义的话,num和sum在dec++里的值为0,即0+0
第二段代码先赋值,假设赋值为1,这时就变为0+1 因为第二种写法把最后输入的数字多加了一次。
这个题目在循环之前应该是给sum和num赋初值为0 了,所以在正常输入的时候没有什么问题。
但是当输入 一个非数字结束循环的时候,二者的差别就看出来了。
第一种写法,每次自加的是上一次输入的内容(第一次自加0相当于没加,不影响结果),当输入非数字的时候,已经将上一次输入的合法数字加进去了,scanf之后直接进行while循环条件判断,不满足条件直接退出循环。
第二种写法,当正常输入数字的时候,scanf把读取的数组赋值给num,自加的是当前循环所输入的数字,当舒服非法数字的时候,scanf没有给num重新赋值,num依然是上次的数值,会被再加一次,之后才是while循环条件判断退出循环。
页:
[1]