
Figure2:fscanf()函数读取数据过程
文件指针最开始指向ffReadFile.dat的第一个字符(即1)处,然后fscanf()根据“format”中的第一个“转换符”读取文件中的内容直到不符合当前“转换符”能够转换的字符为止,如果不符合“转换符”的数据为空或者tab则舍掉空或者tab使文件指针指向下一个数据。然后fscanf()继续在文件中匹配下一个“转换符”的数据。直到为所有的“转换符”匹配完数据为止。
当不符合“特定式”所要求的数据且不为空和tab时,fscanf()将匹配到符合“特定式”的数据赋给地址后不再往下读。如现将ffReadFile.dat中的内容修改如下:

Figure3:ffReadFile.dat修改
再用以下代码读取第一行数据,
re = fscanf(pF, "%d%d%d", &oLine.p, &oLine.l, &oLine.x);
if( 3 == re){
//Print on stdout
printf("%d\t%d\t%d\n", oLine.p, oLine.l, oLine.x);
}else{
switch(re){
case 1:
printf("oLine.p: %d\n", oLine.p);
break;
case 2:
printf("oLine.p: %d, oLine.l: %d\n", oLine.p, oLine.l);
break;
default:
printf("fscanf() read TypeLine error,re: %d\n", re);
break;
}re的将是1,从而输出读取成功的oLine.p的。对于此时的情况,只为&oLine.p成功获取了数据,另外两个地址的数据都获取失败。
使用‘*’可以跳过文件中的部分内容,比如还是图2中的内容,利用以下的语句替换上个程序的fscanf()语句来读取第一行数据:
re = fscanf(pF, "%d%*3c%d%d", &oLine.p, &oLine.l, &oLine.x);
那么程序的输出结果为:100 3 2
%*3c表示跳过3个字符内容。结合2.1程序就得到了如期的输出结果。
如果ffReadFile.dat文件中的内容如下,

Figure4:ffReadFile.dat
那么如果要读取文件中的第一行内容,书写以下语句即可:
fscanf(pF, "%d,%d,%d", &oLine.p, &oLine.l, &oLine.x);以上提到的逗号甚至可以换成’a’这样的字符,但不可以为字符串(Debian Linux 下验证)。fscanf 字符
针对上图的文件,可以使用以下语句
fscanf(pF, "%3d,%d,%d", &oLine.p, &oLine.l, &oLine.x);为&oLine.p读取只有3位长的数据,但因为此时文件指针指向10000中最后的那个0使文件中内容与fscanf()“format”不再匹配,后两个地址不能够正确的获取数据。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22018-2.html
更新完游戏都进不了
我刚升级了
攘外必先安内