C语言中一个二维数组输入的问题?为什么这个数组只让我输入了第一行

这是代码:
#include<stdio.h>
main()
{
int a[2][4];
int j=0,m=0,n=0,m1=0,n1=0;
for(m1;m1<2;m1++)
{
for(n1;n1<4;n1++)
{
printf("请用户输入第%d行%d列的数据:\n",m1+1,n1+1);
scanf("%d",&a[m1][n1]);
printf("\n");
}
}
printf("数据输入完毕。\n");
printf("数据开始输出。\n");
for(m;m<2;m++)
{
for(n;n<4;n++)
{
printf("%d",a[m][n]);
printf(" ");
j++;
if(j==4)
{
printf("\n");
}
}
}
printf("\n");
return 0;
}

int j=0,m=0,n=0,m1=0,n1=0;
for(m1;m1<2;m1++)
{
//第一个for循环的第一次循环结束后,n1=4;当执行第一个for循环的第二次循环时,n1还是为4
//就不执行第二个for循环了。
//n1的初始化应该在第一个for循环的里面即:
n1=0;
for(n1;n1<4;n1++)
{
printf("请用户输入第%d行%d列的数据:\n",m1+1,n1+1);
scanf("%d",&a[m1][n1]);
printf("\n");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-22
因为你外循环执行第二次的时候,也就是m1=1的时候,n1已经是等于3了,内循环跳不进去了,所以也不会出现说输入第二行的值。所以你要改成:
#include<stdio.h>
main()
{
int a[2][4];
int j,m,n,m1,n1; /*这里只要定义不要初始化*/
j=0;
for(m1=0;m1<2;m1++) /*在这里初始化m1=0*/
{
for(n1=0;n1<4;n1++) /*在这里初始化n1=0*/
{
printf("请用户输入第%d行%d列的数据:\n",m1+1,n1+1);
scanf("%d",&a[m1][n1]);
printf("\n");
}
}
printf("数据输入完毕。\n");
printf("数据开始输出。\n");
for(m=0;m<2;m++) /*在这里初始化m=0*/
{
for(n=0;n<4;n++) /*在这里初始化n=0*/
{
printf("%d",a[m][n]);
printf(" ");
j++;
if(j==4)
{
printf("\n");
}
}
}
printf("\n");
return 0;
}
第2个回答  2012-02-22
#include<stdio.h>
main()
{
int a[2][4];
int j=0,m=0,n=0,m1=0,n1=0;//n,n1两个变量在重复使用,只初始化在这可不够
for(m1=0;m1<2;m1++) //m1=0养成好习惯,初始化不赋值不如不写
{
for(n1=0;n1<4;n1++)//写一个=0累不着你,也累不着计算机,省它做啥
{
printf("请用户输入第%d行%d列的数据:\n",m1+1,n1+1);
scanf("%d",&a[m1][n1]);
printf("\n");
}
}
printf("数据输入完毕。\n");
printf("数据开始输出。\n");
for(m=0;m<2;m++)//m=0 养成好习惯,初始化不赋值不如不写
{
for(n=0;n<4;n++)//写一个 =0 累不着你,也累不着计算机,省它做啥
{
printf("%d",a[m][n]);
printf(" ");
j++;
if(j==4)
{
printf("\n");
}
}
}
printf("\n");
return 0;
}

C语言中一个二维数组输入的问题?为什么这个数组只让我输入了第一行
for(m1;m1<2;m1++){ \/\/当第一个for循环第一次循环执行结束后,n1的值为4,所以在执行第一个for循环的第二次循环时应该重置 n1=0;\/\/ n1应该在这地方初始化,不应该和m1一起初始化。for(n1;n1<4;n1++){ printf("请用户输入第%d行%d列的数据:\\n",m1+1,n1+1);scanf("%d",&a[m1...

c语言 二维数组赋值 仅给第一行赋值 前几个数字都为零
二维数组b[8][8]的最大上下界为b[0~7][0~7],你要定义的二维数组的第一行应该是b[1][0~7],那么定义应该为:b[8][8]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}其他没有定义的都是默认为0。

c语言,二维数组输入输出问题
这个事二维数组的存储吧。。main是int型的。

c++二维数组输入输出问题
cin >> a[i][100]; 只能输入一个字母,改为cin >> a[i];cout << a[i][100]<<endl; 这个是输出每个字符串第100个字符,而且这个for循环只能将输入字符串的顺序颠倒,及先输入后输出 最好定义的时候初始化char a[100][100] = {0};...

C语言二维数组有什么办法只遍历第一行?方法说的简单些不要太高深的
int i, a[3][4]; for(i = 0; i < 4; ++i) printf("%d ", a[0][i]);

c语言二维数组问题为什么显示出来的不是数组排列而是一行数字我错哪了...
include<stdio.h>void main(){int A[4][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};int B[4][5]={{20,19,18,17,16},{15,14,13,12,11},{10,9,8,7,6},{5,4,3,2,1}};int x,y;int C[4][5];for(x=0;x<4;x++) \/\/...

c语言,输入246时,排在表格的第一列,为什么不排在横排的第一行
这是二维数组,用户输入的是在每行的第一个位置,即第一列。

C语言 二维数组 在输入时换行存储的问题
如果定义了的数组下标比较高,可以少用,但也有一个条件,第一行的数字相同才好用。如让数组每行的存数个数不超过5个,可以这样像下面这段程序一样使用(注意声明的数组下标是[2][100]),这叫高声明低使用,是C语言本身允许的:int main { int a[2][100];int i,j;for(i=0;i<2;i++)...

C语言用二维数组储存字符串,为什么他的第一位储存不了?
解决方案很简单:在第一条scanf后面加一条getchar();即可 原因:scanf读取数字后在输入缓冲区剩余了多余的回车符'\\n',此回车符被gets读入误认为是第一行,故,需要用getchar()将此多余的回车“吃掉”。

C语言 二维字符数组的输入输出问题
include<stdio.h> void main(){ int i;char name[3][20]; \/\/是你定义的数组不对,[a][b] a代表你要输入个名字个数,b代表你输入的名字长度 for(i=0;i<3;i++){ scanf("%s",&name[i]);} printf("输出:\\n");for(i=0;i<3;i++){ printf("%s\\n",name[i]);} } ...

相似回答