我正在尝试将用户从scanf( "%d", &ar[rows][cols] );
输入的值输入到int变量temp
中。
但不知何故,当我执行时,它会在printf( "Please enter 9 positive integers : " );
编辑:我忘了包含代码。以下是代码:
/* 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( temp );
int main(void)
{
/* declare needed variables or constants, e.g. */
int ar[NROW][NCOL];
int rows, cols, temp;
/* prompt for the user to enter nine positive integers to be stored into the array */
for ( rows = 0 ; rows < 3 ; rows++ )
{
for ( cols = 0 ; cols < 3 ; cols++ )
{
printf( "Please enter 9 positive integers : " );
scanf( "%d", &ar[rows][cols] );
temp = disp_arr(ar[rows][cols]);
printf( "%d\t", temp );
}
printf("\n");
}
}/* end main */
disp_arr( int temp )
{
int x,y;
int a[x][y];
printf( "%d", a[x][y] );
return a[x][y];
}
我的错误在哪里?
答案 0 :(得分:1)
这是一个大问题:
int x,y;
int a[x][y];
定义局部变量时,默认情况下不会初始化它们。相反,它们的值是不确定的,在未初始化时使用这些值会导致未定义的行为。
您还应该收到许多编译器警告,甚至是错误(例如全局范围内的disp_arr( temp );
函数调用)。
此外,即使未声明的函数隐含返回int
,您仍应始终指定它。
答案 1 :(得分:0)
如果ar
是指针,则您不必在&
中使用scanf
。您可以使用&
告诉scanf
您希望存储从控制台读取的值的地址。但是,在指针的情况下,指针已经包含要在其中存储读取值的数据结构的地址。 ar[rows][cols]
本身会转换为地址,因此您无需在其中添加&
。
答案 2 :(得分:0)
另外,请勿将用户输入与打印混淆。它在那个评论中说该函数应该做什么以及它的原型应该是什么样子。所以只要做它说的话。如果从代码中删除用户输入,然后将已经写入的代码移动到该函数中,则得到:
void disp_arr (int a[NROW][NCOL])
{
for (int rows=0; rows<NROW; rows++)
{
for (int cols=0; cols<NCOL; cols++)
{
printf("%d ", a[rows][cols]);
}
printf("\n");
}
}