一道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。。
忘高手详细解答~~
这是我赋的值 展开
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。。
忘高手详细解答~~
这是我赋的值 展开
3个回答
展开全部
首先肯定你的逻辑,之所以出现你所疑问的几点问题,是因为冷门知识知道的少和不够细心。我一一讲解你遇到的问题,希望能帮到你。
一、获取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。
你可以自己算算
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询