动态分配的二维数组以矩阵形式输出
麻烦帮我看下为什么这样不能以矩阵形式输出啊
/*#include <stdio.h>C
#include <stdlib.h>
void main()
{
int n,i=0,j=0;
int **p;
printf("?????????:");
scanf("%d", &n);
p = (int**)calloc(n, sizeof(int*));
for (i = 0; i < n; i++)
{
p[i] = (int*)calloc(n + 1, sizeof(int));
for (j = 0; j < n; j++)
{
scanf("%d", &p[i][j]);
p[i][n] += p[i][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n+1 ; j++)
{
printf("%d ", p[i][j]);
}
}
}
[解决办法]
for (i = 0; i < n; i++)
{
for (j = 0; j < n+1 ; j++)
{
printf("%d ", p[i][j]);
}
printf("\n"); //这里必须要个的换行符呢!
} // 还有每次输入数据的时候,后面加个getchar()函数,吃掉每次输入的回车符!
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int n,i=0,j=0;
int **p;
printf("?????????:");
scanf("%d", &n);
p = (int**)calloc(n, sizeof(int*));
for (i = 0; i < n; i++)
{
p[i] = (int*)calloc(n + 1, sizeof(int));
for (j = 0; j < n; j++)
{
scanf("%d", &p[i][j]);
p[i][n] += p[i][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
[解决办法]
看到上边的人已经恢复得很完全了,要形成矩阵形式,至少要有相应的换行操作,还有,for (j = 0; j < n+1 ; j++),j的范围超了,竟然不发生越界错误。。。挺神奇的
[解决办法]
他第二次分配内存空间的时候也有+1操作,所以不会