这是家庭作业
我的程序似乎根本没有进入任何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);
}
答案 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 = 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