【问题标题】:C two-dimensional array based on user input基于用户输入的C二维数组
【发布时间】:2016-04-22 09:00:56
【问题描述】:

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

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

#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;
}

【问题讨论】:

  • 您使用x 作为循环变量和输入变量。那很糟。此外,当数组有 5 个元素时,数组的索引为 0、1、2、3、4。所以for 循环应该是for(y=0;y&lt;5;y++)
  • 使用一个变量进行循环,使用另一个变量进行读取。然后只需disp[x][y] = read_variable;
  • 我认为你应该有三个循环。第一个循环从用户那里读取五个数字并将它们存储在数组的第一行中。第二个循环计算每个数字的平方并将其存储在数组的第二行中。第三个循环显示数字及其方块。

标签: c arrays variable-assignment scanf


【解决方案1】:

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

#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
    }
}

【讨论】:

    【解决方案2】:

    如果您打算填充此数组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]);
            }
    
        }
    

    【讨论】: