函数返回垃圾值,但不是所有返回值都在C中

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

所以这是我需要完成的工作:

  • 输入以0结尾的整数序列
  • 从这些数字中减去-计算其平方根,并检查它是否为奇数或偶数。
  • 在过程中使用while或do-while循环。

我没有我的号码。目前设置为4的元素,但是无论我设置多少,最后其中大约一半都作为垃圾值出现

我假设这是与指针相关的问题或某处的内存泄漏,我不确定。任何输入将不胜感激

    int num_of_elements = 4;

//function declarations
int* check_num(int i, int number[num_of_elements]);

//main function
int main() {


    //local variables
    int num[5];
    int i;

    printf("\nEnter a number that ends with 0");

    for (i=0;i<num_of_elements;i++) {
        do {
            printf("\n%d.Enter a number: ", i+1);
            scanf("%d", &num[i]);
        } while (num[i] % 10 != 0);

        printf("\nElement %d: %d\n", i+1, num[i]);
    }

    int j = 0;

    while (j<num_of_elements) {
        check_num(j, &num[j]);
        j++;
    }

    return 0;
}

//function that takes the square root and checks if it's an odd or even number

int* check_num(int j, int number[num_of_elements]) {

    int val;

    printf("\nnumber[%d] is %d",j,number[j]);

    val = sqrt(number[j]);
    printf("\nsquare root is is %d", val);

        if (val % 2 == 0) {
            printf("\n%d is a an even number squared", number[j]);
        } else {
            printf("\n%d is an odd number squared", number[j]);
        }
    printf("\n");

    return number;
}
c memory-management
1个回答
0
投票

对于我所看到的,这只是一个错误:必须将对check_num的调用从check_num(j, &num[j]);更改为check_num(j, &num);,否则您将传递例如地址num [j],并且您正试图从该地址访问j元素,因此您试图访问j + j元素

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