1

这是一个家庭作业

我的程序似乎根本没有进入任何 for 循环。在某一时刻,我拥有了每个函数,main并且正在对 2 个全局变量进行操作,而无需通过引用或值传递,并且一切正常。从那时起,我已经将我的函数移出main并通过引用传递一个数组,并将该数组的长度传递给每个函数,我得到printf了循环之外的语句,但除此之外没有任何执行。

根据 GDB,我的程序以退出代码退出046

该程序很简单,它将一个值设置为我的数组的长度,然后提示用户输入整数值来填充该数组。然后我对数组进行排序,然后打印数组,最后调用getMax(int *array, int n)将最大值打印到屏幕上。

输出示例如下:

Enter the number of elements to be sorted:
3
Enter 10 integers in any order:
2
1
4
Inside sortArray
Inside sort and print
inside setMAx
The largest value in the array is: 0

我好像把什么东西弄坏了,我不应该弄乱它。这是我的尝试。

感谢您的帮助,我将坐在这里试图找到我的错误。

#include <stdio.h>

void printArray (int *array, int n);
void sortArray (int *array, int n);
void fillArray (int *array, int n);
void getMax (int *array, int n);

int main(void){

    int array[10],n = 0;

    fillArray  (array, n);
    sortArray  (array, n);
    printArray (array, n);
    getMax     (array, n);

    return 0;
}

void sortArray(int *array,int n){
   printf("Inside sortArray\n");

   int temp, c = 0, c2;
   for(c=0;c<n;c++){
        printf("inside for loop SA\n");
        for(c2=c;c2<n;c2++){ 
            if(array[c]>array[c2]){
            temp=array[c];
            array[c]=array[c2];
            array[c2]=temp;
            }
        }
    }
}

void printArray (int *array, int n){
    int c = 0;
    printf("Inside sort and print\n");
    for(c=0;c<n;c++){
            printf("\t%d",array[c]);
    }
    printf("\n");
}

void fillArray (int *array, int n){
    int c = 0;
    printf("Enter the number of elements to be sorted:\n");
    scanf("%d",&n);
    printf("Enter 10 integers in any order: \n");
    for(c=0;c<n;c++){
        scanf("%d", &array[c]);
    }
}

void getMax (int *array, int n){
    printf("inside setMax\n");
    int temp = 0, i = 0;

    for (i = 0;i<n;i++){
        printf("temp: %d", temp);
        if(array[i]>temp)
        temp=array[i];
    }    
    printf("\nThe largest value in the array is: %d\n", temp);
}
4

4 回答 4

3

将地址传递nfillArray()函数,以便main()您获得用户想要输入的元素数量。

称它为

fillArray  (array, &n);

将其定义为

void fillArray (int *array, int *ptr_n){
    int c = 0, n =0;
    printf("Enter the number of elements to be sorted:\n");
    scanf("%d",&n);
    printf("Enter 10 integers in any order: \n");
    for(c=0;c<n;c++){
        scanf("%d", &array[c]);
    }
    //set ptr_n
    *ptr_n = n;
}

您也可以返回nfromfillArray()而不是为其传递指针。

n = fillArray  (array, n);

将其定义为

int fillArray (int *array, int n){
    int c = 0;
    printf("Enter the number of elements to be sorted:\n");
    scanf("%d",&n);
    printf("Enter 10 integers in any order: \n");
    for(c=0;c<n;c++){
        scanf("%d", &array[c]);
    }
    return n;
}
于 2014-03-05T04:18:18.617 回答
1

void fillArray (int *array, int n)不更新 的值nn您应该作为指针传递,并给出fillArray以下签名:void fillArray (int *array, int *n).

然后,在内部fillArray,您将使用*n修改它的值或n代替&n.

最后,当调用 时fillArray,您将使用 调用它&n

于 2014-03-05T04:18:05.497 回答
1

您按值路径n到,并简单地初始化withfillArray的本地副本,因此当您退出函数时,您仍保留在 main 函数中。您通过引用来掌握路径n0n0n

  void fillarray(.... int* n)
  {

       ....
       scanf("%d",n);
  }

或者甚至更好地简单地从fillarray

  n = fillarray(int *array)
于 2014-03-05T04:23:46.180 回答
1

您将主函数中的 n 传递给初始化为 0 的所有其他函数。所以没有一个循环在工作,因为当你用 n 检查它时它会失败并退出循环。

在函数内部声明的变量(包括声明为参数变量)仅对该函数是局部的。

您读取的值 nfillArray仅在函数在范围内之前有效。它不会反映回主函数 n(两者都是不同的变量)。

您可以在主程序中读取 n 的值,然后将其传递给其他函数。

如果您了解指针概念,您可以使用它,fillArray以便 n 反映在 main 中。

void fillArray (int *array, int *n)

主要是

fillArray (array, &n);

并且在 scanf 中阅读时使用nnot&n和 for 循环*n

于 2014-03-05T04:24:11.810 回答