一、sscanf示例
/* The following sample illustrates the use of brackets and the
caret (^) with sscanf().
Compile options needed: none
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
char *tokenstring = "first,25.5,second,15";
int result, i, rv;
double fp;
char o[10], f[10], s[10], t[10];
void main()
{
result = sscanf(tokenstring, "%[^','],%[^','],%[^','],%s", o, s, t, f);
fp = atof(s);
i = atoi(f);
printf("%s/n %lf/n %s/n %d/n", o, fp, t, i);
}
二、fscanf示例
/* The following sample illustrates the use of brackets and the
caret (^) with sscanf().
Compile options needed: none
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
char *tokenstring = "first,25.5,second,15";
int result, i;
double fp;
char o[10], f[10], s[10], t[10];
FILE *filep; //文件的打开、关闭操作在此省略
void main()
{
rv = fscanf(filep, "%s", tokenstring);
result = sscanf(tokenstring, "%[^','],%[^','],%[^','],%s", o, s, t, f);
fp = atof(s);
i = atoi(f);
printf("%s/n %lf/n %s/n %d/n", o, fp, t, i);
}
如果你直接使用fscanf读取文件中存放的字符串"first,25.5,second,15",
即fscanf(fp, "%[^','],%[^','],%[^','],%s", o, s, t, f);
结果会失败,原因还没有调查出来。(貌似在php里可以,用法一样)
你必须先把文件中存放的字符串读入tokenstring中,将文件操作转化为内存操作,才能解析成功。
下面是网上的摘录:
Definition and Usage
定义和用法
The fscanf() function parses the input from an open file according to the specified format.
fscanf()函数的作用是:从文件中按照指定的格式输入。
Syntax
语法
fscanf(file,format,mixed)
Parameter参数Description描述
fileRequired. Specifies the file to check
必要参数。指定文件对象
formatRequired. Specifies the format.
必要参数。指定格式
Possible format values:
可用的格式值:
%% - Returns a percent sign
%% - 返回一个“%”
%b - Binary number
%b �C 二进制数
%c - The character according to the ASCII value
%c �C 某字符所对应的ASCII值
%d - Signed decimal number
%d �C 包含正负号的十进制数(可包含正负数)
%e - Scientific notation (e.g. 1.2e+2)
%e �C 科学技术符号(例如:1.2e+2)
%u - Unsigned decimal number
%u �C 不包含正负号的十进制数
%f - Floating-point number (local settings aware)
%f �C 浮点数字(本地属性)
%F - Floating-point number (not local settings aware)
%F �C 浮点数字(非本地属性)
%o - Octal number
%o �C 十进制数字
%s - String
%s �C 字符串
%x - Hexadecimal number (lowercase letters)
%x �C 十六进制数(小写字母)
%X - Hexadecimal number (uppercase letters)
%X �C 十六进制数(大写字母)
Additional format values. These are placed between the % and the letter (example %.2f):
其它的文本格式值。它是位于%和字母之间的(如:%.2f):
+ (Forces both + and - in front of numbers. By default, only negative numbers are marked)
+(在数字前面加上‘+’或‘-’来定义数字的正负性;默认情况下,正数不做标记)
' (Specifies what to use as padding. Default is space. Must be used together with the width specifier. Example: %'x20s (this uses "x" as padding)
’(指定使用旁白[padding]的类型。默认是空格space,它必须同时指定宽度,例如:%'x20s (这里使用 "x" 作为旁白[padding]) )
- (Left-justifies the variable value)
-(向左调整变量值)
[0-9] (Specifies the minimum width held of to the variable value)
[0-9](指定了变量值的最小宽度)
.[0-9] (Specifies the number of decimal digits or maximum string length)
.[0-9](指定了十位数字或最大字符串长度)
Note: If multiple additional format values are used, they must be in the same order as above.
注意:如果要使用多个上述的值,顺序必须按照上面的顺序,不能打乱。
mixedOptional.
可选参数
Tips and Notes
注意点
Note: Any whitespace in the format string matches any whitespace in the input stream. This means that a tab (/t) in the format string can match a single space character in the input stream.
注意:任何format的值中的空白部分[whitespace]与input内容相似;这意味着tab键(/t)[制表符]和input内容的一个单一的空格[space]相似。