引用 IP电话的原理结构及其关键技术
引用
茫然 的 两种将字符串转换成浮点数的方法
方法一:
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电话的原理结构及其关键技术的更多相关文章
- OSI与TCP/IP各层的结构与功能,都有哪些协议
前言: 今天更新一下计算机网络的一些非常重要的知识,可能很多人都不知学计算机网络有什么用,我想说的是它真的比较重要,像咱们学校只要是学计算机这个专业都要学习这门课程.另外大家要是去一些像BAT,阿里, ...
- TCP/IP 协议栈4层结构及3次握手4次挥手
TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...
- TCP/IP协议工作原理简述
TCP/IP协议工作原理简述 // */ // ]]> TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...
- IP电话的配置
内容描述:IP电话配置 问题描述: IP电话站点为8203,IP地址为10.11.6.3,电话状态为空心(不正常). 处理过程: 1.在浏览器中打开输入原先已经配置正常的IP话机的IP地址访问其配置, ...
- Java Hotspot G1 GC的一些关键技术
G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相 ...
- HyperLedger Fabric 1.4 关键技术(6.4)
本节介绍从最底层的账本开始,逐一讲解账本的结构和存储.智能合约的编写和部署.通道的操作.节点的背书和提交.排序的共识和客户端SDK的接口调用,与交易流程顺序相反,由里及表的说明Fabric最关键的技术 ...
- Android无埋点数据收集SDK关键技术
前言 鉴于日益强烈的精细化运营需求,网易乐得从去年开始构建大数据平台,<<无埋点数据收集SDK>>因此立项,用于向大数据平台提供全量,完整,准确的客户端数据. << ...
- (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)
/*************************************************************************************************** ...
- <脱机手写汉字识别若干关键技术研究>
脱机手写汉字识别若干关键技术研究 对于大字符集识别问题,一般采用模板匹配的算法,主要是因为该算法比较简单,识别速度快.但直接的模板匹配算法往往无法满足实际应用中对识别精度的需求.为此任俊玲编著的< ...
随机推荐
- MinGW gcc 生成动态链接库 dll 的一些问题汇总 (补充)
我以前写过一个小短文,介绍MinGW gcc 生成动态链接库 dll 的一些问题.当时写的并不全面.近期又遇到写新的问题.这里记录一下,做个补充. 通常情况下,dll 中的函数假设採用 _stdcal ...
- linux select 网络模型
io模型: 同步IO: 阻塞形式,非阻塞形式(轮询).信号驱动IO.IO复用(select, poll, epoll): 异步io:aio_read() 典型场景: 1.客户端处理多种IO------ ...
- C++ signal的使用
1.头文件 #include <signal.h> 2.功能 设置某一信号的对应动作 3.函数原型 typdef void (*sighandler_t )(int); sighan ...
- SQL Server索引进阶:第六级,标签
原文地址: Stairway to SQL Server Indexes: Level 6,Bookmarks 本文是SQL Server索引进阶系列(Stairway to SQL Server I ...
- iOS面试题04-runtime
runtime/KVO等面试题 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个 ...
- BZOJ 3224: Tyvj 1728 普通平衡树(BST)
treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...
- C/C++指针和数组的关系
首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...
- 用CSS样式画横线和竖线的方法
今天在做网页的时候,需要用到CSS画横线,虽然比较简单,但也出了一些小问题,拿来做个备忘. 方法一:用DIV,代码如下:(推荐此方法) <div style="width:80 ...
- AngularJS的启动引导过程
原文:http://www.angularjs.cn/A137?utm_source=ourjs.com 目录: 引导之前 自动引导启动框架 手工引导启动框架 引导第1步:创建注入器 引导第2步:创建 ...
- C/C++程序员面试大纲
基础篇:操作系统.计算机网络.设计模式一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会写 ...