我想用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之前有空格,那就没关系。
答案 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
。