一道C语言题

inta,b;floatx,y;charc1,c2;scanf("a=%d,b=%d",&a,&b);scanf("%f,%e",&x,&y);scanf("%c%c%c... int a,b; float x,y; char c1,c2;
scanf("a=%d,b=%d",&a,&b);
scanf("%f,%e",&x,&y);
scanf("%c%c%c",&c1,&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);
①输入y的值为35.12,为什么输出的是35.119999却没有带e。。
②在输入c1,c2的值时,输入abc,为什么输出的是c1=a,c2=b? 我的理解是在输入b时c1的值先将输入的a替换掉,所以c1=b,c2=c。。
忘高手详细解答~~
这是我赋的值
展开
 我来答
shanhuhai0322
推荐于2017-12-16 · 超过36用户采纳过TA的回答
知道答主
回答量:47
采纳率:100%
帮助的人:25.2万
展开全部

首先肯定你的逻辑,之所以出现你所疑问的几点问题,是因为冷门知识知道的少和不够细心。我一一讲解你遇到的问题,希望能帮到你。

一、获取y的值为35.12,如果你想输出为科学计数法,那么就需要在输出函数中用%e而不是在输入函数中。eg:printf("%E",y).

二、在输入c1,c2时输入abc,那么你理解的对,应该c1=b,c2=c;之所以出现你的问题,是因为你输入35,35.12时按下键盘回车键,键盘缓冲区保留了一个‘\n',这个'\n'被读取到c1中1次。你需要在读取字符之前清空缓冲区。

我给你全码:

#include<iostream>

#include<stdio.h>

int main(void)

{

 int a, b;   float x, y;   char c1, c2;

 int c;

 

 scanf("a=%d,b=%d", &a, &b);

 scanf("%f,%e", &x, &y);

 while ((c = getchar()) != '\n' && c != EOF);//清空缓冲区

 scanf("%c%c%c",&c1, &c1, &c2);

 printf("a=%d,b=%d,x=%f,y=%e,c1=%c,c2=%c\n", a, b, x, y, c1, c2);//y=%e

 system("pause");//暂停

 return 0;

}

 

追问
哦谢谢大神~~
理解的差不多了
还有一点
就是输出的y值就是%f,为什么会出现35.119999这个数呢
追答
这是十进制转换为二进制时的缺陷导致。
35转换为二进制为:10011=35
0.12转换为二进制位:0.000111101……算不尽,只能无限接近0.12而不可能等于0.12。
你可以自己算算
凤中肩1afcc
2015-08-03
知道答主
回答量:4
采纳率:0%
帮助的人:4483
展开全部
输出的时候 y的控制符是%e 不是%f char是单个字符输入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0o挥霍o0
2015-08-03
知道答主
回答量:8
采纳率:0%
帮助的人:2.9万
展开全部
修改错别字:"忘高手"的忘改为"望",修改完毕!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式