计算输入数的总和

问题描述 投票:0回答:1

我想用c语言用指针概念计算输入数的总和,但当我编译下面给定的程序时,总和的正确值没有出现,请帮我找出我在下面程序中的错误。

#include<stdio.h>

void main()
{   
    int g , *p;

    int sum = 0;

    int x=1;

    for(int i=1; i<3; i++ )
    {   
        scanf("%d ", &g);       
    }

        p = &g;

    while( x < 3){
    sum =  sum + *p;
    p++;
    x++;
    }

    printf("\n sum = %d ",sum);

}
c pointers
1个回答
1
投票

您的 g 只是 一个 整数所以。

  1. 每次你调用 scanf("%d ", &g);,你将 覆盖 的前一个值。
  2. 当你在 p++;,该指针将不再有效。你认为它将指向哪里?

如果你想存储三个 不同 值在 g,你需要把它变成一个 阵列 的整数。

要做到这一点,请对您的代码进行以下修改。

int g[3] , *p; // "g" can now store three different values
int x=0; // Later on - counting from 0 thru 2 in the "while" loop
//...
for (int i=0; i<3; i++) // NOTE: Arrays begin at "0" in C!
{   
    scanf("%d ", &g[i]); // Store to the element indexed by "i"       
}
//...
p = g; // For arrays, don't need the & operator: this will give address of first element


0
投票

你只能在 g.

因此, p++; 此处将使 p 指向一个无效的地方。

你应该分配一个数组来存储所有的输入值。

同时注意,你应该使用标准的 int main(void) 在托管环境下,而不是 void main()在C89中是非法的,而在C99或更高版本中则是实现定义的,除非你有一些特殊的理由来使用非标准签名。

#include<stdio.h>

int main(void)
{   
    int g[3] , *p;

    int sum = 0;

    int x=1;

    for(int i=1; i<3; i++ )
    {   
        scanf("%d ", &g[i]);
    }

        p = &g[1];

    while( x < 3){
    sum =  sum + *p;
    p++;
    x++;
    }

    printf("\n sum = %d ",sum);

}
© www.soinside.com 2019 - 2024. All rights reserved.