为什么我的scanf不能在函数中工作?

时间:2017-11-21 12:09:41

标签: c

当我将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]);

        }
    }
}

2 个答案:

答案 0 :(得分:1)

我认为您抱怨参数rowscols的更改在调用函数中不可见。

这是因为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]

的初始值