c++文件读取空格 您所在的位置:网站首页 fscanf读取换行 c++文件读取空格

c++文件读取空格

2023-10-16 03:58| 来源: 网络整理| 查看: 265

fde37eebf5f370b1b9bbfacfc17bf825.png

原创: hxj7

fscanf 函数用于格式化读入文件中数据,可以大大提高读取文件的效率。这次笔者将最近使用该函数的一些经验记录下来。 第一部分:问题和结论

fscanf 函数的原型是:

int fscanf(FILE* stream, const char* format, [argument...]);

fscanf 函数与 scanf 函数用法类似,只不过前者用于读取文件流的数据而已。至于 fscanf 的基础用法我就不赘述了,网上的文章很多。简单提及一下要点:

1. format str:如%d, %f, %c, %s等,分别表示读入一个整数,浮点数,字符,字符串。还可以加上控制,如%ld,表示读入一个长整型数,%20s表示最多读入20个字符。 2. 返回值:在没有出错的情况下,fscanf 返回正确匹配和赋值的域的个数;如果出错,则返回EOF。

fscanf 难点在于以下几点:

1. 对空白符的处理(空格、制表符、换行符); 2. *的用法; 3. [] 以及 [^] 的用法; 4. EOF 的处理;

对于上述问题,网上的文章都语焉不详,所以笔者自己写了点实验代码进行验证,应该是比较详细的小结了。先把结论罗列在下面,具体的实验代码放在文章最后:

1. 在空白符这个意义上来讲,fscanf 对空格、制表符、换行符是一视同仁的,不加区分的;%s会跳过前面的空白符,但是不会跳过后面的空白符;%c不会跳过空白符。 2. *表示读取一个域,但是不赋值给变量。 3. []表示只读取中括号内的字符,[^]表示不读取中括号内的字符,值得注意的是%[^]s将不会跳过前面的空白符。 4. 如果还没有任何一个域匹配成功或者任何一个匹配失败发生之前,就达到了文件流末尾,就算出错;或者读取文件流出错。这两种情况下,fscanf 返回EOF。 第二部分:实验代码

为了验证上面提出的一些问题,笔者动手写了下面的实验代码进行验证分析,代码共分为六个部分,注意每个部分所使用的文件内容是不一样的:

1. fscanf 对空格的处理; 2. fscanf 对制表符的处理; 3. fscanf 对换行符的处理; 4. 当空格、制表符以及换行符混杂时fscanf的处理; 5. []符号在format str中的应用; 6. 出错的情况。

实验代码:(注意为了清晰无误地表示出不同的空白符,用 代表空格,表示制表符,表示换行符。)

#include #include void fscanfTest(FILE* fp) { char c1, c2, s1[100], s2[100]; int d; // 第一部分:fscanf对空格的处理 printf("the content of file is:n"); printf("helloworld666lucky"); printf("nn"); // %s不会跳过后面的空格 fscanf(fp, "%s", s1); printf("%s!n", s1); // hello! // %s会跳过前面的一个空格 rewind(fp); // 将光标移回文件开头 fscanf(fp, "%s%s", s2, s1); printf("%s! %s!n", s2, s1); // hello! world! // %*s会从文件流中读入,但是不会将值赋予变量(*的作用) rewind(fp); fscanf(fp, "


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有