在C语言 中要求以%d的形式输入,但输入的是英文字母,编译器如何处理

 我来答
金色潜鸟
2013-08-29 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5748万
展开全部
编译器返回输入 没成功 信息,例如:
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 !");
sunchy12345678
2013-08-29 · TA获得超过665个赞
知道小有建树答主
回答量:443
采纳率:100%
帮助的人:346万
展开全部

转换失败,返回成功转换的数值个数。

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的值都没变,可能是垃圾值。

注意转换失败之后那个字符依然留在输入流里。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2013-08-29 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6710万
展开全部
类型不配,一般将是一个绝对值很大的负数。
追问
我测试了下,在后面接着用%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)根本就没有接收那个字符!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叱蝎
2013-08-29 · TA获得超过1479个赞
知道小有建树答主
回答量:1154
采纳率:100%
帮助的人:695万
展开全部
会输出一串不知道什么的数字
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
高国刚enjoy
2013-08-29
知道答主
回答量:7
采纳率:0%
帮助的人:9989
展开全部
系统的是随机数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式