我有这个代码
#include <math.h>
#include <stdio.h>
const int n = 3;
const int s = 3;
int getm(int mat[n][s]);
int printm(int mat[n][s]);
int main()
{
int m[n][s];
getm(m);
printm(m);
return 0;
}
int getm(int mat[n][s])
{
for(int x = 0;x < n;x++)
{
for (int y = 0;y<s;y++)
{
scanf("%i ", &mat[x][y]);
}
}
return 0;
}
int printm(int mat[n][s])
{
for(int x = 0;x<n;x++)
{
for(int y = 0;y<s;y++)
{
printf("%i ", mat[x][y]);
if(y==(s-1))
{
printf("\n");
}
}
}
}它应该要求9个数字来组成一个3x3矩阵数组,但它实际上要求10个数字,printm工作得很好-只打印9个数字。error在哪里?
发布于 2012-09-29 23:36:23
scanf("%i ", &mat[x][y]);去掉%i之后的空格,这样它只读取一个数字:
scanf("%i", &mat[x][y]);发布于 2012-09-29 23:36:18
我认为问题出在%i之后的空格:您不需要第十个数字,但是您的代码无论如何都会请求它,因为它等待在第九个数字之后获得一个空格。
另外,可以通过删除if来稍微优化打印代码
for(int x = 0;x<n;x++)
{
for(int y = 0;y<s;y++)
{
printf("%i ", mat[x][y]);
}
printf("\n");
}https://stackoverflow.com/questions/12654029
复制相似问题