牵风 发表于 2021-9-15 11:51:30

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);
……

大马强 发表于 2021-9-15 13:05:45

可以看出这两个代码区别是运算操作和赋值操作的循序不一样
第一段代码先运算,如果num和sum在前面没有定义的话,num和sum在dec++里的值为0,即0+0
第二段代码先赋值,假设赋值为1,这时就变为0+1

sunrise085 发表于 2021-9-15 15:04:41

因为第二种写法把最后输入的数字多加了一次。
这个题目在循环之前应该是给sum和num赋初值为0 了,所以在正常输入的时候没有什么问题。
但是当输入 一个非数字结束循环的时候,二者的差别就看出来了。
第一种写法,每次自加的是上一次输入的内容(第一次自加0相当于没加,不影响结果),当输入非数字的时候,已经将上一次输入的合法数字加进去了,scanf之后直接进行while循环条件判断,不满足条件直接退出循环。
第二种写法,当正常输入数字的时候,scanf把读取的数组赋值给num,自加的是当前循环所输入的数字,当舒服非法数字的时候,scanf没有给num重新赋值,num依然是上次的数值,会被再加一次,之后才是while循环条件判断退出循环。
页: [1]
查看完整版本: s1E14为什么两个结果不同