概述
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("%cn", &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
最后
以上就是留胡子小甜瓜为你收集整理的並不怎么恶心的scanf(),数据类型越级问题,精度问题的全部内容,希望文章能够帮你解决並不怎么恶心的scanf(),数据类型越级问题,精度问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复