【问题标题】:For loop in a function brings up random numbers [duplicate]函数中的for循环会产生随机数[重复]
【发布时间】:2018-09-06 21:34:02
【问题描述】:

所以我正在编写一个关于查找所有范围之和的程序,例如,如果我输入一个 1,然后输入一个 10,它应该显示 55,但它会显示一些长随机数。有谁知道这段代码有什么问题?谢谢!

#define <stdio.h>

calculateSum(int lowNumber, int highNumber);

int main()
{
   int lowerNumber,
       higherNumber;

   scanf("%d", lowerNumber);
   scanf("%d", higherNumber);

   printf("The sum of all ranges is: %d", calculateSum(lowerNumber, higherNumber));

int calculateSum(int lowNumber, int highNumber)
{
    int total;

    for(int x = lowNumber; x <= highNumber; x++)
    {
       total = total + x;
    }
    return total;
}

【问题讨论】:

  • 这是无效的 C.#define &lt;stdio.h&gt; ?不应该是#include 吗?在您开始下一个 fn 之前,您的主 fn 也不会关闭。还要在使用前将total设置为0
  • calculateSum中,你没有初始化total,所以它的初始值是随机的。使用int total = 0;正确设置

标签: c for-loop


【解决方案1】:

total 首次用作右值(即赋值 total = total + x; 的右轴)之前,您没有对其进行初始化,因此它的值保持未定义(并且不确定)。

【讨论】:

    【解决方案2】:

    除了@biplls answer还有一个问题:

    int lowerNumber,
       higherNumber;
    
    scanf("%d", lowerNumber);
    scanf("%d", higherNumber);
    

    是 UB(在运行时产生编译警告和 SEGFAULT)。 printf 需要 int*,而不是 int。正确的代码是

    int lowerNumber,
       higherNumber;
    
    scanf("%d", &lowerNumber);
    scanf("%d", &higherNumber);
    

    【讨论】:

      【解决方案3】:

      这里有一些错误

      1. #include &lt;stdio.h&gt; 不是#define
      2. 使用scanf 时,您必须在读入的变量前添加&amp;(在这种情况下!!)
      3. 主 fn 不返回任何内容,它应该返回 0(通常)(显然我错了,主从 C99 隐式返回 0)
      4. 在编写下一个 fn 之前主 fn 未关闭
      5. total 应设置为 0
      6. for 循环初始化仅在 C99 中允许
      7. 声明原型的返回类型是个好主意

      修复所有这些

      #include <stdio.h>
      
      int calculateSum(int lowNumber, int highNumber);
      
      int main()
      {
         int lowerNumber,
             higherNumber;
      
         scanf("%d", &lowerNumber);
         scanf("%d", &higherNumber);
      
         printf("The sum of all ranges is: %d\n", calculateSum(lowerNumber, higherNumber));
         return 0;
      }
      
      int calculateSum(int lowNumber, int highNumber)
      {
          int total;
          total = 0;
      
          for(int x = lowNumber; x <= highNumber; x++)
          {
             total = total + x;
          }
          return total;
      }
      

      运行上述

      $ ./sum
      1
      10
      The sum of all ranges is: 55
      

      【讨论】:

      • gcc -std=c99 sumc -o sum.o编译
      • 3.错了,main 自 C99 以来就有一个隐含的return 0
      • 我明白了,我不知道,修复它:)
      猜你喜欢
      • 2015-12-26
      • 2013-08-16
      • 2014-01-19
      • 1970-01-01
      • 2013-10-11
      • 2011-10-05
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多