1scanf()纠结了好久...记得已经发过两篇scanf()的文章了...这次在做一道题的时候又遇上了...现在scanf()的大概运作是比较清楚了...今天发现的问题是这样...语句大概如下:
1
2
3
4printf("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========================
数据类型越级问题,这个是今晚在老大的书里刚发现到的(还是老大亲自找给我看的= =!)...原来在不同级别的数据类型进行转换时,会出现升级时数据不损失,降级(即高字节类型降到较低字节类型)时数据会出现损失...虽然今晚这个问题不是降级的原因...
今晚的问题是这样的,直接看下面这段代码吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18int 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(),数据类型越级问题,精度问题的全部内容,更多相关並不怎么恶心内容请搜索靠谱客的其他文章。
发表评论 取消回复