引用

茫然 的 两种将字符串转换成浮点数的方法
 方法一:
  char szString[] = "-2876.99812376443";
  double db1;
  db1 = atof(szString);
  printf("atof result:\n");
  printf("%f %.12f %.2f %e %E\n", db1, db1, db1, db1, db1);
  printf("%.1e %.1E %.18e %.18E\n", db1, db1, db1, db1);
  方法二:
  char szString2[] = "-2876.99812376443";
  double db2;
  sscanf(szString2, "%lf", &db2);
  printf("\nsscanf result:\n");
  printf("%f %.12f %.2f %e %E\n", db2, db2, db2, db2, db2);
  printf("%.1e %.1E %.18e %.18E\n", db2, db2, db2, db2);
  这两种方法可以得到一模一样的输出!输出如下:
  atof result:
  -2876.998124 -2876.998123764430 -2877.00 -2.876998e+003 -2.876998E+003
  -2.9e+003 -2.9E+003 -2.876998123764430100e+003 -2.876998123764430100E+003
  sscanf result:
  -2876.998124 -2876.998123764430 -2877.00 -2.876998e+003 -2.876998E+003
  -2.9e+003 -2.9E+003 -2.876998123764430100e+003 -2.876998123764430100E+003
  很多人对sscanf家族的函数不太了解,我想把sscanf家族的函数具体用法写出来,考试.大希望大家可以共同进步,有什么不对的地方欢迎提出来。先瞄下该家族的一些函数原型:
  // 从键盘输入数据到变量
  int scanf(char *format,...);
  // 从字符串输入数据到变量,如下相同
  int sscanf(const char *buffer, const char *format, ... );
  int _sscanf_l(const char *buffer, const char *format, locale_t locale, ... );
  int swscanf(const wchar_t *buffer,const wchar_t *format, ... );
  int _swscanf_l(const wchar_t *buffer,const wchar_t *format,locale_t locale, ... );
  下面我们只看看标准形式的sscanf函数:
  int sscanf(const char *buffer, const char *format, ... );
  先说说关于它的返回值的问题,库函数几乎都是有返回值的,有些人可能很奇怪,怎么很少人用过sscanf的返回值呢?sscanf会返回成功接收到的变量数量的值。比如sscanf("3.14159","%f",&pi);返回值是1。
  测试如下程序:
  #include <stdio.h>
  int main ()
  {
  int a;
  printf ("%d",scanf("%d\n",&a));
  return 0;
  }
  如果你开始就输入回车,程序会继续等待你输入,因为在输入数字的时候,scanf会跳过空白字符。the c programming language上说,scanf实际上是用getchar()接受由数字组成的字符串,再转换成数字。如果我输入ctrl-z(unix上是ctrl-d)则会返回-1(随编译器而定).这实际上就是常量EOF的值,也就是所谓的返回eof。如果我键入的不是数字返回值就是0。但是如果我输入浮点数,又会怎么样呢?我举的例子中同样会返回1,但是缓冲区会留下垃圾,如果是scanf("%d%d",&a,&b);则会出错。这是可以使用一个库函数fflush(stdin)来清除缓冲。不过貌似雨中飞燕大姐说这个用法是非标准的。K&R,只是说行为没有定义,但我们可以使用while((c=getchar())!='\n'&&c!=EOF);同样可以清除后面的垃圾scanf的格式匹配还是比较简单,一定要记住的就是普通变量一定要加上&,否则编译器无法检测错误,但运行肯定会段错误。
  代码及意义
  %a读浮点值(仅适用于 C99)
  %A读浮点值(仅适用于 C99)
  %c 读单字符
  %d 读十进制整数
  %i 读十进制、八进制、十六进制整数
  %e 读浮点数
  %E 读浮点数
  %f 读浮点数
  %F 读浮点数(仅适用于 C99)
  %g 读浮点数
  %G 读浮点数
  %o 读八进制数
  %s 读字符串
  %x 读十六进制数
  %X 读十六进制数
  %p 读指针值
  %n 至此已读入值的等价字符数
  %u 读无符号十进制整数
  %[ ] 扫描字符集合
  %%读 % 符号(百分号)
  前面都很简单,%p,%n很少用到,跳过。要输入%必须要在前面再加一个%,重点来谈谈%s和%[]。%s是读入一个数组,他与gets的区别就在于%s会以任何的空字符结束,而gets是回车结束。同样%s前可以加数字,表示只读多少个。ANSI C 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。 扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组。 扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。 例如,以下的扫描集使 scanf() 读入字符 A、B 和 C:
  %[ABC]
  使用扫描集时,scanf() 连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读匹配的字符)。返回时,数组中放置以 null 结尾、由读入字符组成的字符串。对于许多实现来说,用连字符可以说明一个范围。 例如,以下扫描集使 scanf() 接受字母 A 到 Z:
  %[A-Z]
  重要的是要注意扫描集是区分大小写的。因此,希望扫描大、小写字符时,应该分别说明大、小写字母。对于%[]还可以用^+任意字符(包括eof)来结束字符串的输入。比如%[^EOF]就是直到有EOF输入,字符串才中止。但一定要记住就是c语言是缓冲输入,即使你%[^a],再你输入回车之前输入多少的a都是不可能结束的。%s的输入会跳过空白字符,但是%c则不会。这也就是
  scanf("%d", &h);
  scanf("%c", &c);
  如果这写的话,变量c放的一定是回车。如果想实现这种输入,可以在两个语句之间加入一个getchar(),他可以吃掉这个回车,也可用scanf("%d %c",&h,&c);来做,再输入数字后加一个空格。就可以了但千万别用scanf("%d\n", &h); K&R说的十分清楚,任何非格式化的字符都需要完全匹配。意味着,只有输入数字后面再加\n才是合法的。还有就是*加在任何项的前面表示该项不符值。

引用 IP电话的原理结构及其关键技术的更多相关文章

  1. OSI与TCP/IP各层的结构与功能,都有哪些协议

    前言: 今天更新一下计算机网络的一些非常重要的知识,可能很多人都不知学计算机网络有什么用,我想说的是它真的比较重要,像咱们学校只要是学计算机这个专业都要学习这门课程.另外大家要是去一些像BAT,阿里, ...

  2. TCP/IP 协议栈4层结构及3次握手4次挥手

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...

  3. TCP/IP协议工作原理简述

    TCP/IP协议工作原理简述 // */ // ]]>   TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...

  4. IP电话的配置

    内容描述:IP电话配置 问题描述: IP电话站点为8203,IP地址为10.11.6.3,电话状态为空心(不正常). 处理过程: 1.在浏览器中打开输入原先已经配置正常的IP话机的IP地址访问其配置, ...

  5. Java Hotspot G1 GC的一些关键技术

    G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相 ...

  6. HyperLedger Fabric 1.4 关键技术(6.4)

    本节介绍从最底层的账本开始,逐一讲解账本的结构和存储.智能合约的编写和部署.通道的操作.节点的背书和提交.排序的共识和客户端SDK的接口调用,与交易流程顺序相反,由里及表的说明Fabric最关键的技术 ...

  7. Android无埋点数据收集SDK关键技术

    前言 鉴于日益强烈的精细化运营需求,网易乐得从去年开始构建大数据平台,<<无埋点数据收集SDK>>因此立项,用于向大数据平台提供全量,完整,准确的客户端数据. << ...

  8. (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)

    /*************************************************************************************************** ...

  9. <脱机手写汉字识别若干关键技术研究>

    脱机手写汉字识别若干关键技术研究 对于大字符集识别问题,一般采用模板匹配的算法,主要是因为该算法比较简单,识别速度快.但直接的模板匹配算法往往无法满足实际应用中对识别精度的需求.为此任俊玲编著的< ...

随机推荐

  1. PendingIntent详解

    Intent是一个意图,一个描述了想要启动一个Activity.Broadcast或是Service的意图.它主要持有的信息是它想要启动的组件(Activity.Broadcast或是Service) ...

  2. hdu 2777(线段树)

    这道题是看了别人的思路才做出来的. 刚看完这道题没什么思路,线段的长度是10^5,操作指令数是10^5,还要记录不同颜色种类数,觉着怎么写肯定都是要超时.我当时在节点里增加了一个数组记录已经出现的颜色 ...

  3. xcode 不值钱的动画UIButton

    #import "ViewController.h" @interface ViewController () /** 按钮 */ @property(nonatomic,weak ...

  4. java动手动脑课后思考题

    public class SquareInt { public static void main(String[] args) { int result; ; x <= ; x++) { res ...

  5. WTL error C3861: 'DDX_Control': identifier not found

    error C3861: 'DDX_Control': identifier not found 继承类加上     public CWinDataExchange<CMainDlg>, ...

  6. QT中QWidget、QDialog及QMainWindow的区别

    本文转自http://www.cnblogs.com/aqxin/archive/2011/05/23/2054156.html QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基 ...

  7. BZOJ 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富( dp )

    dp , dp[ i ][ j ] = max( dp[ k ][ j - 1 ] ) + G[ i ][ j ] ( i - 1 <= k <= i + 1 , dp[ k ][ j - ...

  8. POJ_1698_Alice's Chance

    #include <iostream> #include <queue> #include <climits> #include <cstring> u ...

  9. ubuntu NFS

    NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录, 访问该目录就像访问本地目录一样! 一般而言, 使用 ...

  10. 解决用户 'IIS APPPOOL\Classic .NET AppPool' 登录失败

    解决用户 'IIS APPPOOL\Classic .NET AppPool' 登录失败 windows 7进入iis管理器 本地应用程序池 选中classic. net appPool 选择右侧的 ...