当我将scanf-s中的行和列添加到它们工作的主函数中时。 但是在这个函数中它们不起作用,它们不会在for循环中使用。 这个问题是什么?
void function (int rows, int cols, int array[S][S])
{
int i, j;
scanf ("%d", &rows);
scanf ("%d", &cols);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
while (array[i][j]<1 || array[i][j]>S)
scanf ("%d", &array[i][j]);
}
}
}
答案 0 :(得分:1)
我认为您抱怨参数rows
和cols
的更改在调用函数中不可见。
这是因为C是一种按值传递的语言。
改变是:
int main(void)
{
int rows;
int cols
int array[5][5];
caller( &rows, &cols, array); // Pass by pointer, not value.
/* Now, rows and cols have been properly set */
return 0;
}
/* Parameters are received as references, not values */
void function (int *p_rows, int* p_cols, int array[5][5])
{
int i, j;
scanf ("%d", p_rows);
scanf ("%d", p_cols);
for (i = 0; i < *p_rows; i++)
{
for (j = 0; j < *p_cols; j++)
{
while (array[i][j]<1 || array[i][j]>5)
scanf ("%d", &array[i][j]);
}
}
}
答案 1 :(得分:0)
while循环的条件从一开始就可能是错误的。您不知道array[i][j]