#include
#define size 4
int i,j;
int main()
{
int a[3][size]={
1,2,3,4,
5,6,7,8,
9,10,11,12
};
scanf("i = %d,j = %d",&i,&j);
while((i >= 3)||(j >= size))
{
if(i>=3)
{
printf("error,please input i again\n");
scanf("i = %d",&i);
}
else if(j>=size)
{
printf("error,please input j again\n");
scanf("j = %d",&j);
}
}
printf("%d",a[i][j]);
return 0;
}
不知道为什么进入循环后没法再次进行输入。
你的读入错了
不能写成scanf("i = %d,j = %d",&i,&j);
是scanf("%d%d",&i,&j);
后面那个读入也错了
数组的初始值赋值也错了
int a[3][size]={
1,2,3,4,
5,6,7,8,
9,10,11,12
};
应该改成
int a[3][size]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
看你输入是否正确.输入 i=3,j=1 这种格式,不是简单的输入3,1
int i = 100;
int j = 100;
while((i >= 3)||(j >= size))
{
printf("请输入i和j的值:i,j/n");
scanf("%d,%d",&i,&j);
if(i>=3)
{
printf("error,please input i again\n");
scanf("i = %d",&i);
}
else if(j>=size)
{
printf("error,please input j again\n");
scanf("j = %d",&j);
}
}
不废话,直接上改完的代码
#include
#define size 4
int i,j;
int main()
{
int a[3][size]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
scanf("%d%d",&i,&j);
while((i >= 3)||(j >= size))
{
if(i>=3)
{
printf("error,please input i again\n");
scanf("%d",&i);
}
else if(j>=size)
{
printf("error,please input j again\n");
scanf("%d",&j);
}
}
printf("%d",a[i][j]);
return 0;
}
在再次输入之前都加一句:getchar();
否则就不等待输入了
算你幸运了,C语言里面一个神奇的问题被你遇见了,C中的scanf函数在循环中没有打断的功能,你遇到问题应该是,你只输入了一次i,j值程序就运行结束了是吧,在C里面scanf函数是没有打断功能的,而一同作为输入函数的getchar()在循环中就有打断的功能,这下知道问题出在哪儿了吧,但是你是不是还会想在scanf之前加了getchar()以后你每次在输入i,j之前都需要都输入一个无效字符呢?答案又出乎你的意料,不需要,在scanf之前加getchar()作为打断等待函数,但getchar()并不真正接收你输入的字符,你还没看明白吗?就是说你只要在scanf之前就一个getchar(),你写的程序就会按照你预想的来运行,getchar()不会影响输入,这是一个奇葩的问题,不要问我为什么,我解释不清楚,这是experience,C语言就有这么个令人难以理解的问题