该程序假设显示用户以3×3板方式输入的9个数字。然而,我得到的只是一些奇怪的数字。
我的disp_arr
函数有问题,但我不知道那里的错误是什么。我对函数和指针都很新,但我想这就是我学习的方法!
这是我在运行时获得的输出:2686636 clone errors
/* File: StudentID_Surname.c - e.g. 1234567_Wilson.c
* This program finds the range between highest and lowest value of a 2-D array */
#include <stdio.h>
#define NROW 3
#define NCOL 3
/* Write a function
void disp_arr(int a[NROW][NCOL]) { ... }
where a[][] is the 2-D array
Print the entire array to the screen. */
disp_arr( int temp );
int main(void)
{
/* declare needed variables or constants, e.g. */
int ar[NROW][NCOL];
int rows, cols;
int temp[9] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */
/* prompt for the user to enter nine positive integers to be stored into the array */
int index = 0;
printf( "Please enter 9 positive integers :\n");
for ( rows = 0 ; rows < 3 ; rows++ )
{
for ( cols = 0 ; cols < 3 ; cols++ )
{
scanf( "%d", &ar[rows][cols] );
/* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/
temp[index] = ar[rows][cols];
index += 1; /* Increase the array in temp[z] */
}
}
/* Call disp_arr to display the 3 x 3 board */
disp_arr( temp );
}/* end main */
disp_arr( int storedValue )
{
int x,y;
for ( x = 0 ; x < 3 ; x++ )
{
for ( y = 0 ; y < 3 ; y++ )
{
printf( "%d\t", storedValue );
}
printf("\n");
}
}
我考虑过包含storedValue[counter]
之类的计数器,但它会返回更多错误= /
disp_arr( int storedValue )
{
int x,y;
int counter = 0
for ( x = 0 ; x < 3 ; x++ )
{
for ( y = 0 ; y < 3 ; y++ )
{
printf( "%d\t", storedValue[counter] );
counter += 1;
}
printf("\n");
}
}
任何帮助将不胜感激。
提前致谢!
萨姆
/* Editted code after haccks and Rohan's advice */
#include <stdio.h>
#define NROW 3
#define NCOL 3
/* Write a function
void disp_arr(int a[NROW][NCOL]) { ... }
where a[][] is the 2-D array
Print the entire array to the screen. */
disp_arr( int temp );
int main(void)
{
/* declare needed variables or constants, e.g. */
int ar[NROW][NCOL];
int rows, cols;
int temp[9] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */
/* prompt for the user to enter nine positive integers to be stored into the array */
int index = 0;
printf( "Please enter 9 positive integers :\n");
for ( rows = 0 ; rows < 3 ; rows++ )
{
for ( cols = 0 ; cols < 3 ; cols++ )
{
scanf( "%d", &ar[rows][cols] );
/* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/
temp[index] = ar[rows][cols];
index += 1; /* Increase the array in temp[z] */
}
}
/* Call disp_arr to display the 3 x 3 board */
disp_arr( *temp );
}/* end main */
disp_arr( int storedValue )
{
int x,y;
int counter = 0;
for ( x = 0 ; x < 3 ; x++ )
{
for ( y = 0 ; y < 3 ; y++ )
{
/* How on earth do I include the counter inside without errors??*/
printf( "%d\t", storedValue );
counter += 1;
}
printf("\n");
}
}
答案 0 :(得分:1)
将temp
传递给disp_array
表示您传递的是数组temp
的第一个元素的地址(因为它会在这种情况下衰减为指针)你的功能。为此,函数参数必须是int *
类型。
将您的disp_array
声明为
void disp_arr( int *temp);
将其命名为
disp_array(temp);
将您的功能定义更改为
void disp_arr( int *storedValue )
{
int i;
for ( i = 0 ; i < NROW*NCOL ; i++ )
{
printf( "%d\t", storedValue[i] );
printf("\n");
}
}
答案 1 :(得分:1)
disp_arr()
应该使用int *
参数而不是int
。
并按照第二个功能打印出来。
printf( "%d\t", storedValue[counter] );
答案 2 :(得分:0)
与您的功能问题没有直接关系,但我认为您可以清理主要的for循环。因为看起来你对你的ar数组做了什么,你可以做类似下面的事情(仔细检查我的语法错误,因为我现在不在编译器,但希望这个想法很清楚):
int main(void)
{
/*declare needed variables or constants, e.g. */
int total = NROW * NCOL;
int temp[total];
printf("Please enter %d positive integers :\n", total);
for(int i = 0; i < total; i++)
{
scanf("%d", temp[i]);
}
// Print the array.
disp_arr(temp);
}