並不怎么恶心的scanf(),数据类型越级问题,精度问题

scanf()纠结了好久...记得已经发过两篇scanf()的文章了...这次在做一道题的时候又遇上了...现在scanf()的大概运作是比较清楚了...今天发现的问题是这样...语句大概如下:

printf("Please input A:");
scanf("%c",&A);
printf("Please input B:");
scanf("%c",&B);


输入:A,回车,然后就直接跳过第二个scanf()了;输入:AB,它直接把A送到了第二个scanf()去了;输入:A B时,又直接跳过了;目前还没找到原因...不清楚为什么会这样,虽然这个问题是可以解决的,但是总想搞个清楚...还是想自己去捅,不想那么快就请人帮忙...先在这里记着,改天实在想不出来了再请人帮忙...

===============This is update in 2012.12.14========================

输入:A,回车,然后就直接跳过第二个scanf()了---------这是因为变量A与B是char类型,而输入A+回车时,scanf()只会去读取输入流的第一个字符存入到变量A去,而自然的'\n'会被存到变量B去,如果想输入变量A的值后,又回车再输入另一值给变量B的话,可以修改成scanf("%c\n", &A)(PS:上面原来的语句有误,对读者有误导的意思,抱歉,应该添加'&').

输入:AB,它直接把A送到了第二个scanf()去-----------这个应该有误,刚在VC++上测试,能正常把字符'A'与'B'分别送存到变量A,B上.

输入:A B时,又直接跳过了;---------这个可以用第1个问的回答来理解,一样的.在输入流的数据是这样的:'A'+' '(空格)+B,按顺序下来的话,当然没有存到字符'B'到变量B去了.

===============This is update in 2012.12.14========================


数据类型越级问题,这个是今晚在老大的书里刚发现到的(还是老大亲自找给我看的= =!)...原来在不同级别的数据类型进行转换时,会出现升级时数据不损失,降级(即高字节类型降到较低字节类型)时数据会出现损失...虽然今晚这个问题不是降级的原因...

 

今晚的问题是这样的,直接看下面这段代码吧

int main( void )
{
 long double i = 0.00001;
 long double t;
 long a;
 t = 100000.0;         //当直接赋予这个准确的数值时,t所存放的值也不会跟下面的运算得出的数值一样有误差,所以此时再赋值给a时,a的值自然与t的一样
//t = 1 / 0.00001;   //这里,当t用这个式子赋值时,在电脑里面的数据会出现很小的误差,经讨论,这个应该是硬件原因,例如不同机器的浮点运算也不同,而且在标准里也没有详细说明要怎样处理,正因为这个误差,就使到下面
// t *= t;               //这个式子运算后的结果不准确,这个考虑问题产生是由于精度问题...:D
 a = ( long ) t;      //因为t的赋值是1/0.00001,所以,a在这里收到的值也是t的误差的那个值,故被打印出来的值也不能与t被打印出来的值相等
// a *= a;
 printf( "%ld/n", a );
 printf( "%lf/n", t );
 return 0;
}


输出的话运行一下代码就可以看出来了,这里要提出的问题是这样的,上面注释都写明了...只是目前对此类问题的方法还只是停留在精度上的解决...想找出有更好的解决方法...同样,也是在这里留一个标记吧,以后再解决不了再上来看看...哈:D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值