山宗大哥 发表于 2018-8-3 22:26:06

关于C语言学习的课后题

关于C语言S1E14的动动手第1题,看了答案觉得有点迷糊~
我自己写的也很迷糊,程序运行不对,一出现字符整个程序就无限循环“请输入合法数字了”,不知道问题出在哪麻烦大家帮我看一下吧~
题目是:1. 写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果
第一个程序是答案给的代码
#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 i,status;
        int sum =0;
        printf("请输入合法的数字:");
        scanf("%d",&i);
    status = scanf("%d",&i);
       
       
    for(sum=0;status==1;)
        {
                sum = sum +i;
                printf("请输入合法的数字:");
          scanf("%d",&i);
       }
   
        printf("结果是:%d",sum);
       
        return 0;

       
}

claws0n 发表于 2018-8-3 22:44:56

我直接说你的代码好了,自己琢磨琢磨,反正有答案了。
如果随用户输入任意次数,那么不能用 for。 for 最大的特点就是限制循环次数。如果用 for 会有很大的限制。
应该是进了循环之后才 scanf()

还是 for 循环也没关系,你应该在前面设 int status = 1 ,那么如果用户输入非数字,就会结束循环。

DASHUAIZI 发表于 2018-8-4 11:47:23

因为你写的代码中status=1之后就没有变过,for中的条件一直成立就会无限循环。
再者是scanf()函数接受一个与对应类型的数据时返回1,如果是两个数据返回2。所以只需要在循环中scanf前加上status=就行了。

山宗大哥 发表于 2018-8-4 13:02:54

DASHUAIZI 发表于 2018-8-4 11:47
因为你写的代码中status=1之后就没有变过,for中的条件一直成立就会无限循环。
再者是scanf()函数接受一个 ...

十分感谢~已经解决了!

山宗大哥 发表于 2018-8-4 13:03:32

claws0n 发表于 2018-8-3 22:44
我直接说你的代码好了,自己琢磨琢磨,反正有答案了。
如果随用户输入任意次数,那么不能用 for。 for 最 ...

十分感谢 ! ! 谢谢提醒怕噢!~{:5_109:}
页: [1]
查看完整版本: 关于C语言学习的课后题