该计划的目标是操纵2D阵列内的数据。
int main(void)
{
int array[500][500];
int x0, y0;
if ( input(array, &x0, &y0)==0 )
return 1;
return 0;
}
int input( int array, int *x0, int *y0 ) {
int x = 0;
int y = 0;
int err = 0;
char c;
printf("Enter sizes:\n");
if ( scanf("%d %d", x0, y0)!=2 || *x0<=0 || *y0<=0 || *x0>500 || *y0>500 ) {
printf("Invalid input.\n");
return 0;
}
while ( y < *y0 ) {
x = 0;
while ( x < *x0 ) { //reading entries in x coordinate
c = getchar();
switch(c) {
case 'o' : array[y][x] = 1; break;
case '.' : array[y][x] = 0; break;
case '!' : array[y][x] = 2; break;
default : err = 1; break;
}
x++;
}
if( x!=*x0 )
err=1;
y++; //move to another "line"
}
if (y!=*y0)
err=1;
if (err==1) {
printf("Invalid input.\n");
return 0;
}
return 1;
}
程序首先获取数组的尺寸,然后获得三个字母中的一个:o
,!
或.
,例如:
3 3
ooo
.!o
...
问题是我的函数不接受它的参数:input(array, &x0, &y0)
导致我无法在switch
中写入该数组。前一种情况passing argument 1 of 'input' makes integer from pointer without a cast
,而后者subscripted value is neither array nor pointer nor vector.
我之前的程序使用了一维数组,这种将数组传递给函数的方法很有效。
那么我应该如何将我的数组作为参数传递给函数呢?提前谢谢。
答案 0 :(得分:1)
在main
函数之后移动input
函数的代码,以便在编译input
时知道main
的原型。
将input
的原型更改为:
int input(int array[500][500], int *x0, int *y0) {
您的代码还有其他问题。例如,您没有正确处理每个矩阵行之后输入的换行符。