c语言数组指针问题!!!!!!!!!
怎么我输入任何一个数字的时候都要重新出入,而当输入一个非数字字符时就弹出一大堆i=i=i=i=呢???#include<stdio.h>bujige(int(*p)[4]...
怎么我输入任何一个数字的时候都要重新出入,而当输入一个非数字字符时就弹出一大堆i=i=i=i=呢???
#include <stdio.h>
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
int i, j;
do
{
printf("i = ");
scanf("%d", &i);
}
while( 'i'<48 || 'i'>50 );
do
{
printf("j = ");
scanf("%d", &j);
}
while( 'j'<48 ||'j'>51 );
bujige(a, 3, i, j);
} 展开
#include <stdio.h>
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
int i, j;
do
{
printf("i = ");
scanf("%d", &i);
}
while( 'i'<48 || 'i'>50 );
do
{
printf("j = ");
scanf("%d", &j);
}
while( 'j'<48 ||'j'>51 );
bujige(a, 3, i, j);
} 展开
3个回答
展开全部
首先更正一点不是指针的问题 是概念问题while( 'i'<48 || 'i'>50 );和while( 'j'<48 ||'j'>51 );这两句是恒成立的。这是因为 'i'=105; 'j'=106;查ASCII表就知道
由scanf("%d", &i);可知道是输入一个整型的数赋给i。
当输入时数字时由于 while( 'i'<48 || 'i'>50 );恒成立所以就一直循环下去,即一直重新输入
当输入一个非整形数据时,由于scanf函数果没有接收到所需要的数据类型的数据时,并不会清空缓存,如果输入一个非整形数据时,由于scanf需要一个整型数据,可是当前输入缓冲中的数据并不是一个整型的数据,那么scanf会直接退出,并返回0,表示读到0个数,同时不会改变输入缓冲,进入到下一轮的循环之中,这时由于输入缓冲中还有数据,scanf不会阻塞,而是直接返回,可是发现缓冲中的数据不是所要的数据,这样返回0.....使得循环一直运行下去,而不可能因为用户的再次输入退出循环。
解决这个问题可以1、如果是在VC环境下可以用fflush函数以清除缓冲区。2、使用 setbuf对缓冲区设置。3、可以直接使用getchar将缓冲中数据读出来
具体函数使用楼主可以查MSDN
具体程序如下:
#include <stdio.h>
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
char i, j;//定义为char型
do
{
printf("i = ");
scanf("%s", &i); //输入为字符形式
}
while( i<48 || i>50 ); //由于其实int和char类型是一样的直接判断i
do
{
printf("j = ");
scanf("%s", &j); //输入为字符形式
}
while( j<48 ||j>51 ); //由于其实int和char类型是一样的直接判断j
// bujige(a, 3, i, j);
}
不过你的bujige(a, 3, i, j);肯定是有问题的i会超出堆栈的
楼主可以自己多调试调试
由scanf("%d", &i);可知道是输入一个整型的数赋给i。
当输入时数字时由于 while( 'i'<48 || 'i'>50 );恒成立所以就一直循环下去,即一直重新输入
当输入一个非整形数据时,由于scanf函数果没有接收到所需要的数据类型的数据时,并不会清空缓存,如果输入一个非整形数据时,由于scanf需要一个整型数据,可是当前输入缓冲中的数据并不是一个整型的数据,那么scanf会直接退出,并返回0,表示读到0个数,同时不会改变输入缓冲,进入到下一轮的循环之中,这时由于输入缓冲中还有数据,scanf不会阻塞,而是直接返回,可是发现缓冲中的数据不是所要的数据,这样返回0.....使得循环一直运行下去,而不可能因为用户的再次输入退出循环。
解决这个问题可以1、如果是在VC环境下可以用fflush函数以清除缓冲区。2、使用 setbuf对缓冲区设置。3、可以直接使用getchar将缓冲中数据读出来
具体函数使用楼主可以查MSDN
具体程序如下:
#include <stdio.h>
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
char i, j;//定义为char型
do
{
printf("i = ");
scanf("%s", &i); //输入为字符形式
}
while( i<48 || i>50 ); //由于其实int和char类型是一样的直接判断i
do
{
printf("j = ");
scanf("%s", &j); //输入为字符形式
}
while( j<48 ||j>51 ); //由于其实int和char类型是一样的直接判断j
// bujige(a, 3, i, j);
}
不过你的bujige(a, 3, i, j);肯定是有问题的i会超出堆栈的
楼主可以自己多调试调试
追问
heh 名家一出手,便知有没有!!!
展开全部
#include <stdio.h>
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
int i, j;
do
{
printf("i = ");
scanf("%d", &i);
}
while( i<48 || i>50 );//这里不需要加' '号 只有char 字符类的才需要这个 去掉就行了
do
{
printf("j = ");
scanf("%d", &j);
}
while( j<48 ||j>51 );
bujige(a, 3, i, j);
}
bujige(int (*p)[4], int n, int i, int j)
{
printf("the score is %d\n", *( p[i]+j) );
}
main()
{
int a[3][4]={{88,86,88,97},{56,75,89,87},{99,76,43,88}};
int i, j;
do
{
printf("i = ");
scanf("%d", &i);
}
while( i<48 || i>50 );//这里不需要加' '号 只有char 字符类的才需要这个 去掉就行了
do
{
printf("j = ");
scanf("%d", &j);
}
while( j<48 ||j>51 );
bujige(a, 3, i, j);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是scanf("%d", &i);中你规定的输入类型为d% 所以你输入字符的时候就会出现错误
另,while( 'i'<48 || 'i'>50 )这句中也是有问题的,你写成 ‘i’ 这种形式表示的是字符i,而不是你认为你输入的数据,应该写成while( i<48 || i>50 )就对了
另,while( 'i'<48 || 'i'>50 )这句中也是有问题的,你写成 ‘i’ 这种形式表示的是字符i,而不是你认为你输入的数据,应该写成while( i<48 || i>50 )就对了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询