C语言中关于fscanf()方法与fgets()方法的简单知识点总结 | 您所在的位置:网站首页 › fscanf返回值-1 › C语言中关于fscanf()方法与fgets()方法的简单知识点总结 |
fscanf()
int fscanf(FILE* stream, const char* format, [argument...]);
fscanf()方法与scanf()方法类似。不同的是多了第一个参数,文件指针参数,后两个参数用法类似。其中要注意的是第三个参数处填写变量时,不要遗漏取地址符&。 要点1. format str:如%d, %f, %c, %s等,分别表示读入一个整数,浮点数,字符,字符串。还可以加上控制,如%ld,表示读入一个长整型数,%20s表示最多读入20个字符。 2. 返回值:在没有出错的情况下,fscanf 返回正确匹配和赋值的域的个数;如果出错,则返回EOF。 3. 在空白符这个意义上来讲,fscanf 对空格、制表符、换行符是一视同仁的,不加区分的;%s会跳过前面的空白符,但是不会跳过后面的空白符;%c不会跳过空白符。 4. *表示读取一个域,但是不赋值给变量。 5. []表示只读取中括号内的字符,[]表示不读取中括号内的字符,值得注意的是%[]s将不会跳过前面的空白符。 6. 如果还没有任何一个域匹配成功或者任何一个匹配失败发生之前,就达到了文件流末尾,就算出错;或者读取文件流出错。这两种情况下,fscanf 返回EOF。 如对以上文件中的数字求和,使用fscanf()方法的时候在判断空格与换行或者制表符的时候表现就是一一的。 处理结果如下 此处应该注意while循环条件不能只填写 fscanf(fp,"%d",&temp) 否则会进入死循环!最标准的就是fscanf(fp,"%d",&temp)!=EOF 切记是!=EOF fgets() char * fgets(char * s, int n,FILE *stream);因为fgets()方法是获取一行,所以第一个参数就是字符数组,所读出字符串暂存地址。本质上是指针。第二个参数表示每次读入最多n-1个字符,若一行中字符数大于n,则会分多次输出,但是依然要等到一行全部输出完以后才会进行下一行的读取。第三个参数是文件指针。 要点fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据 读取此文件时,第二参数为5时结果如下: 若将参数改为6则结果如下: 1. fgets遇到“空格”就跟遇到平常的字符一样读取,遇到“回车”则结束本次读取,最后往缓冲区(char *buf[])的最后加多一个"\0"表示本次读取一行结束。 2. fscanf不论遇到“空格”还是“回车”,都当作'\0'读取到缓冲区中(char *buf[]),并结束本次读取。 3. 注意在获取文件中所有内容时,while循环中的条件区别! fgets()无法使用!=EOF,可以使用 fgets(sd,6,fp)!=NULL 或者fgets(sd,6,fp) fscanf()则不可使用以上两种方法,而可以使用!=EOF。 (如有错误的地方,欢迎大家指正!) |
CopyRight 2018-2019 实验室设备网 版权所有 |