s1e14
原谅我今天的题没做完就过来问问题了,题目描述:1. 写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
小甲鱼的答案(看的一脸懵{:10_243:} )
#include <stdio.h>
int main()
{
int num = 0;
long sum = 0L; // 0L表示类型为long的0
int status;
do
{
printf("请输入合法的数字:");
sum = sum + num;
status = scanf("%d", &num);
} while(status == 1);
printf("结果是:%ld\n", sum);
return 0;
}
我做的
#include <stdio.h>
int main()
{
int num = 0;
long sum = 0L; // 0L表示类型为long的0
int status;
do
{
printf("请输入合法的数字:");
status = scanf("%d", &num);
sum = sum + num;
} while(status == 'p');
printf("结果是:%ld\n", sum);
return 0;
}错的
1.不应该是遇到p跳出吗?那个1是啥 ?
2.为什么要把 sum = sum + num;写在 status = scanf("%d", &num);这个的后面? 现指出错误 如下图 为什么 status == 1也在 图里 说啦
为什么 ①在②上面
我们不妨 计算 1 和 2的值
①在②上面 :
先走 sum =sum + num 为0
键入num = 1 (整数)status = 1while条件为真继续走
sum = sum + 1为 1
键入num = 2 (整数) status = 1while条件为真继续走
sum = sum + 1为 3
键入q(非整数) status= 0 whlie条件为假循环结束
sum= 3
①在②下面 :
先走 键入 num = 1(整数) status = 1
sum = sum + num 为1 while条件为真继续走
键入 num = 2 (整数 ) status = 1
sum = sum + num 为 3 while条件为真继续走
键入 num = q(非整数 ) status = 0
sum = sum + num 为 5 (num值之前赋值为2 键入q的时候 num值不变) while条件为假循环结束
sum= 5
我说的可能有点啰嗦尽可能想让up 知道问题 在哪,不知道明白没有不清楚 可以 再 联系
本帖最后由 pheron 于 2018-11-1 09:28 编辑
status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到数值则返回0,所以永远不会返回'p',所以你的do...while 永远不会循环,输出只会是0。
小甲鱼的'q'跳出,这里只是为了表述简便,事实上任意一个字母都行,但是你觉得告诉用户“按q退出”简便,还是告诉用户“按任意大小写字母或者标点退出”比较方便?
第二个问题,因为要先通过scanf()读取到num的数值才能做加法运算呀。num读取到第一个数值,然后sum = 0 + num 。之后就是前边所有数的和加上读取到的数值。 pheron 发表于 2018-11-1 09:21
status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到 ...
嗨,你好昂 {:5_109:} up 也可以 看看 这朋友的答案说的 也很清楚的 西瓜小刚 发表于 2018-11-1 10:06
现指出错误 如下图 为什么 status == 1也在 图里 说啦
为什么 ①在②上面
'p'是什么类型的值在这里并不重要(我感觉这里楼主是想打'q'的),单引号已经把它给引用为ASCII数值了,重要的是前边的status由于赋的是scanf()的返回值,所以永远只有真和假,即0和1。 pheron 发表于 2018-11-1 11:30
'p'是什么类型的值在这里并不重要(我感觉这里楼主是想打'q'的),单引号已经把它给引用为ASCII数值了, ...
嗯嗯 是滴 是滴 西瓜小刚 发表于 2018-10-31 23:11
现指出错误 如下图 为什么 status == 1也在 图里 说啦
为什么 ①在②上面
谢谢老师{:5_109:}讲的太好了;老师你太棒了!!!!么么哒~~~ pheron 发表于 2018-11-1 09:21
status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到 ...
status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师 2268194521 发表于 2018-11-1 13:24
status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师
{:10_323:}
页:
[1]