在c中从用户那里获取矩阵输入

时间:2016-12-24 16:20:29

标签: c input

我想用c中的scanf从用户那里获取5x5矩阵输入。 例如,如果用户键入1 2 3 4 5 6 7 8 9 10,我想创建一个像这样的2d数组:arr [0] [0] = 1,... arr [1] [0] = 6等等 输入也可以是新行。

我试过了:

int main() {
        int arr[5][5]; eipus(arr);
        char c; int r=0; int col=0;
        while ((c=getchar()) != EOF) {
                if (col >= 5) { col=0; r++; }

                if (scanf("%d",&arr[r][col]) == 1) { col++; }
        }
        printArr(arr);
        return 1;
}

eipus() - 将数组设置为0. printArr - 打印数组。

问题是它总是忽略第一个数字。例如:

[admin@server]$ a.out
1 2 3 4 5 6 7 8
2 3 4 5 6
7 8 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

数字1被忽略。但如果1之前有空格,那就没关系。

2 个答案:

答案 0 :(得分:1)

12 3 4消耗一个字符。要获得更有趣的结果,请尝试输入 2

然后,您将获得第一个元素ungetc()。 在阅读之前使用while ((c=getchar()) != EOF) { ungetc(c,stdin); if (col >= 5) { col=0; r++; } if (scanf("%d",&arr[r][col]) == 1) { col++; } } 恢复之前的状态。

int c

顺便说一下,你需要把它设为-1,因为EOF只不过是scrollwheel

答案 1 :(得分:0)

由于该行,您输入的第一个字符会在变量c中被扫描 while ((c=getchar()) != EOF)

您可以在整个循环中输入矩阵元素中扫描的值c