【问题标题】:Program with array to find a sum in c [closed]带有数组的程序以在c中求和[关闭]
【发布时间】:2019-02-17 05:39:20
【问题描述】:

我正在考虑使用code 来查找数字的总和。

所以我写了下面code:

#include <stdio.h>
#include <math.h>
int main()
{
    int n,i,s=0,a[100];
    printf("enter number of numbers");
    scanf("%d",n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    s=0;
    for (i=1;i<=n;i++)
     {s=s+a[i];}
    printf("sum is%d\n",s);
}

但在输出中它显示分段 error 。即

那么错误是什么?

【问题讨论】:

  • scanf("%d",n); 应该是scanf("%d", &amp;n)
  • 节省时间,启用所有警告。
  • @chux 无论如何要在 onlinegdb 编译器中做到这一点?会有帮助的。
  • @user187604 我不熟悉 onlinegdb 编译器。尽管缺乏对警告的控制,但它似乎是一个弱编译器 - 你得到了你所付出的。

标签: c arrays


【解决方案1】:

所以这一行:

scanf("%d",n);

应该替换为

scanf("%d",&n);

说明:

scanf() 根据格式从stdin 读取数据并将数据存储在下一个附加参数指向的位置。在这种情况下,格式为%d意味着我们要读取一个整数,这个整数将存储在n的位置。 &amp; 操作符是获取 C 中变量的位置。

【讨论】:

    【解决方案2】:

    使用这个:

    scanf("%d",&n);
    

    原因:

    您必须将&amp; 放在scanf 中使用的变量前面。一旦你了解了指针,其中的原因就会变得清晰。很容易忘记&amp; 符号,当您忘记它时,您的程序几乎总是会在运行时崩溃。

    示例:

    scanf("%d %d", &a, &b);
    printf("%d %d", a, b);
    

    由于上面的a 和b 是两个变量,每个变量都有自己的地址,但我们分别发送a 和b 的地址而不是a 和b。原因是scanf() 需要修改a 和b 的值,但它们是scanf() 的本地值。所以为了反映主函数的变量a和b的变化,我们需要传递它们的地址。我们不能简单地按值传递它们。 但是在 printf 函数的情况下,因为我们只会在输出控制台中打印变量的值,所以变量 a 和 b 的值不会发生任何变化。所以不需要发送他们的地址。

    【讨论】:

    • 如果在声明时初始化变量,则在任何情况下都可以防止崩溃。
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多