C基于用户输入的二维数组

时间:2016-01-17 00:05:59

标签: c arrays variable-assignment scanf

我正在尝试使用二维数组来分配用户输入,该数组需要五个数字并将它们平方。程序应计算并存储阵列中每个用户的平方值。

我正在使用当前代码获得正确的输出,但我无法弄清楚如何将输入分配给数组,而不会在输出中出现错误。

#include <stdio.h>

int main(void)
{
    int disp[2][5];

    int x, y;
    printf("Please enter 5 integer values:\n");

    for(x=0; x<=2; x++) {

        for (y=0; y<=5; y++) {
            scanf("%d", &x);
            printf("[ %d ][ %d ]\n", x, x*x);
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

以下代码扫描五个数字,并将数组存储在数组中(从不再使用):

#include <stdio.h>

#define NUM_ITEMS 5 // store the number of items in one place

int main()
{
    int disp[2][NUM_ITEMS];
    int i;

    printf("Please enter %d integer values:\n", NUM_ITEMS);

    for (i = 0; i < NUM_ITEMS; ++i) {

        if ( scanf("%d", &disp[0][i]) == 1 ) {
            // always check the return value of scanf()

            disp[1][i] = disp[0][i] * disp[0][i]; // store squares in array
            printf("[ %d ][ %d ]\n", disp[0][i], disp[1][i]);
        }
        else {
            printf("Error in scanf()\n");
            break;
        }
    }

    return 0;
}
  

我正在尝试使用二维数组分配用户输入   需要五个数字并将它们平方。该程序应该计算和   存储数组中每个用户的平方值

您的代码存在一些问题:

for(x=0; x<=2; x++) { // overflows array (0, 1 and 2)
                      // should be x < 2
    for (y=0; y<=5; y++){ // idem -> y < 5
        scanf("%d", &x);  // scanf() is called 10 times
                  // x is already used as a loop counter!
        printf("[ %d ][ %d ]\n", x, x*x);
             // squares are never stored in the array
    }
}

答案 1 :(得分:0)

如果您打算填充此数组disp[2][5];,则可以输入2 * 5 = 10个整数。我认为这就是你的意图。请注意,您必须更改for循环条件以避免数组的索引溢出。

你必须改变如下:

printf("Please enter 10 integer values:\n");
for(x=0; x<2; x++)
    {
        for (y=0; y<5; y++){
            scanf("%d", &disp[x][y]);
            printf("[ %d ][ %d ]\n", disp[x][y], disp[x][y]*disp[x][y]);
        }

    }