在C语言 中要求以%d的形式输入,但输入的是英文字母,编译器如何处理
展开全部
编译器返回输入 没成功 信息,例如:
int x,k;
k = scanf("%d",&x);
你拍入了 英文字母,x 没读到数据,scanf 返回 0 给 k.
scanf 返回 成功 读入的数据个数,一个也没读到,返回 0。
int a,b,c,k;
k = scanf("%d %d %d", &a,&b,&c);
你拍入了 123 456 abc
scanf 返回 成功 读入的数据个数 2. (a=123,b=456,c 没读到数据)
你可以添打印语句:
if (k<3) printf("read err !");
int x,k;
k = scanf("%d",&x);
你拍入了 英文字母,x 没读到数据,scanf 返回 0 给 k.
scanf 返回 成功 读入的数据个数,一个也没读到,返回 0。
int a,b,c,k;
k = scanf("%d %d %d", &a,&b,&c);
你拍入了 123 456 abc
scanf 返回 成功 读入的数据个数 2. (a=123,b=456,c 没读到数据)
你可以添打印语句:
if (k<3) printf("read err !");
展开全部
转换失败,返回成功转换的数值个数。
e.g.
scanf("%d%d%d", &a, &b, &c);
输入1 2 a 转换失败,a==1,b==2,,c没有被修改,可能是垃圾值。如果之前c被赋值就不是。
输入1 2 3a转换失败,a==1,b==2,c==3,返回3。
输入a转换失败,a,b,c的值都没变,可能是垃圾值。
注意转换失败之后那个字符依然留在输入流里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类型不配,一般将是一个绝对值很大的负数。
追问
我测试了下,在后面接着用%d输出时,不管输入是什么英文字母,都是8512960这个数,但是加个
while(1)循环时,输入一次,就一直在打印,请问怎么回事?
追答
其实,当scanf("%d",&n)要求输入整数时输入了字符,那么scanf("%d",&n)是什么也不接收的,它要跳过非数字的所有字符寻找整数,找不到就结束了。加while(1)后,若输入、输出语句在这个循环中,第一次由于输入缓冲区中无数据,scanf("%d",&n)要等待输入,一旦输入个字符,输入缓冲区中就有“数据”了,但scanf("%d",&n)不接收字符,要跳过去寻找整数,没有找到则结束;可是while(1)循环回去又要让scanf("%d",&n)接收数据,这次不需要从键盘输入了,因为它发现输入缓冲区中有“数据”(其实是第一次输入的字符),它就又重复上述动作。所以输出语句就无休止地输出同一个数。为了验证我说的这些,给你提供个代码:
void main(void){
int n=3;
scanf("%d",&n);
printf("%d\n",n);
}
当你输入整数时会输出你输入的整数,当你输入字符时会输出初始化的3而不会输出那个无厘头的一长串数了……这就证明由于类型不配,scanf("%d",&n)根本就没有接收那个字符!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会输出一串不知道什么的数字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询