C程序没有进入任何for循环?

时间:2014-03-05 04:12:19

标签: c arrays function scope pass-by-pointer

这是家庭作业

我的程序似乎根本没有进入任何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 个答案:

答案 0 :(得分:3)

n的地址传递给fillArray()函数,以便在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;
}

您也可以从n返回fillArray(),而不是为其传递指针。

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;
}

答案 1 :(得分:1)

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

然后,在fillArray内,您可以使用*n修改其值,或使用n代替&n

最后,在致电fillArray时,您会将其称为&n

答案 2 :(得分:1)

您的路径n的值为fillArray,只需使用n初始化0的本地副本,因此当您退出该功能时,您的n在主函数中保持0。你通过推荐来推销路径n

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

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

甚至更好只是从fillarray

返回n
  n = fillarray(int *array)

答案 3 :(得分:1)

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

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

你读取fillArray中的值n,其中只有函数在范围内才有效。 它不会被反射回主函数n(两者都是不同的变量)。

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

如果你对fillArray中可以使用的指针概念有所了解,那么n会反映在main中。

void fillArray (int *array, int *n)

中的

fillArray (array, &n);

在阅读scanf时,使用n而不是&n并使用for for *n