我是靠谱客的博主 微笑树叶,最近开发中收集的这篇文章主要介绍精度丢失&const&scanf函数诸多问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于scanf函数返回值的理解及用法

1.scanf()函数有返回值且为int型。scanf返回值表示成功读入的数据个数。
2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
例如,scanf("%d%d", &a, &b); 如下为返回值的四种情况
     (1) 如果a和b都被成功读入,那么scanf的返回值就是2
     (2) 如果只有a被成功读入,返回值为1
     (3)如果a和b都未被成功读入,返回值为0(即scanf函数遇到非法输入时,返回值为0)
     (4)如果遇到错误或遇到文件结束符(end of file,EOF,控制台下用Ctrl+Z输入)则返回EOF(stdio.h中定义符号常量:#define EOF -1)。
 由此例可见因此可利用scanf函数的返回值判断数据是否正确读入。

例如,
#include <stdio.h>
/*此代码测试scanf函数返回值状态,若不输入正确数据输入ctrl+z即文件结束符该函数返回值为-1*/
int main(int argc, char *argv[])
{
   int x,y,c;
   c=scanf("%d %d",&x,&y);
   printf("x=%d  y=%d",x,y);
   printf("nc=%dn",c);
}




精度丢失
       首先得从计算机本身去讨论这个问题。我们知道,计算机并不能识别除了二进制数据以外的任何数据。无论我们使用何种编程语言,在何种编译环境下工作,都要先 把源程序翻译成二进制的机器码后才能被计算机识别。以上面提到的情况为例,我们源程序里的2.4是十进制的,计算机不能直接识别,要先编译成二进制。但问 题来了,2.4的二进制表示并非是精确的2.4,反而最为接近的二进制表示是2.3999999999999999。原因在于浮点数由两部分组成:指数和尾数,这点如果知道怎样进行浮点数的二进制与十进制转换,应该是不难理解的。如果在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可预 知,并且变得不可逆。我们有理由相信,就是在这个过程中,发生了精度的丢失。而至于为什么有些浮点计算会得到准确的结果,应该也是碰巧那个计算的二进制与 十进制之间能够准确转换。

unsigned long long windows2003下输入输出格式用%I64d
LINUX下用%lld




const
        const是一个B语言的关键字,它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如A++、PHP5、B#.net、HC08 C。

最后

以上就是微笑树叶为你收集整理的精度丢失&const&scanf函数诸多问题的全部内容,希望文章能够帮你解决精度丢失&const&scanf函数诸多问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部