本文共 3076 字,大约阅读时间需要 10 分钟。
函数原型:
char *fgets(char *buf, int bufsize, FILE *stream);
注意:第二个参数是最大读取字节数
参数:*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
stream: 文件结构体指针,将要读取的文件流。*
EOF
EOF是一个宏:#define EOF -1 文件中不存在EOF,EOF是表示文件是否结束的一个状态值 EOF文件结束标识符,以\0作为结束标识符#define _CRT_SECURE_NO_WARNINGS#include#include #include //按行向文件写入void test(){ FILE* fp = fopen("test.txt", "w"); if (fp == NULL) { printf("打开文件失败"); } char buf[120] = "拨不通的电话\n信号丢失云层上\n孩子别紧张\n生活不是竞技场\n"; fputs(buf, fp); fclose(fp);}//从文件中按行读取void test01(){ FILE* fp = fopen("test.txt", "r"); if (fp == NULL) { printf("打开文件失败"); exit(1); } char buf[120]; //feof判断读取是否到达文件结尾 while (!feof(fp)) { //每次读取文件中的一行数据 fgets(buf, sizeof(buf), fp); //因为输出的时候加了\n,在输入的时候也加了\n,说以每行之间会空出一行 //解决方法:每次循环将buf字符串倒数第二个换行符变成\0 buf[strlen(buf) - 1] = '\0'; printf("%s\n", buf); }}int main(){ test(); test01(); return 0;}
解决方法1:将生活不是经济场最后的\n去掉,这样光标不会移动到下一行
但是乱码还是会出现,因为最后一次循环的时候会把\0前面的场字是中文,占两个自节,而替换的\0只有一个字节,因此会出现乱码
#define _CRT_SECURE_NO_WARNINGS#include#include #include //按行向文件写入void test(){ FILE* fp = fopen("test.txt", "w"); if (fp == NULL) { printf("打开文件失败"); } char buf[120] = "拨不通的电话信号\n丢失云层上\n孩子别紧张\n生活不是竞技场\n"; fputs(buf, fp); fclose(fp);}//从文件中按行读取void test01(){ FILE* fp = fopen("test.txt", "r"); if (fp == NULL) { printf("打开文件失败"); exit(1); } char buf[120]; //feof判断读取是否到达文件结尾 while (!feof(fp)) { //每次读取文件中的一行数据 char*ret=fgets(buf, sizeof(buf), fp); if (ret == NULL) { break; } //因为输出的时候加了\n,在输入的时候也加了\n,说以每行之间会空出一行 //解决方法:每次循环将buf字符串倒数第二个换行符变成\0 buf[strlen(buf) - 1] = '\0'; printf("%s\n", buf); }}int main(){ test(); test01(); return 0;}
#define _CRT_SECURE_NO_WARNINGS#include#include #include //按行向文件写入void test(){ FILE* fp = fopen("test.txt", "w"); if (fp == NULL) { printf("打开文件失败"); } char buf[120] = "拨不通的电话信号\n丢失云层上\n孩子别紧张\n生活不是竞技场\n"; fputs(buf, fp); fclose(fp);}//从文件中按行读取void test01(){ FILE* fp = fopen("test.txt", "r"); if (fp == NULL) { printf("打开文件失败"); exit(1); } char buf[120]; while (fgets(buf, sizeof(buf), fp)) { buf[strlen(buf) - 1] = '\0'; printf("%s\n", buf); }}int main(){ test(); test01(); return 0;}
下面的代码才是正解,有无\n均可,直接将文件中的数据以文件中的形式读取出来
#define _CRT_SECURE_NO_WARNINGS#include#include #include //按行向文件写入void test(){ FILE* fp = fopen("test.txt", "w"); if (fp == NULL) { printf("打开文件失败"); } char buf[120] = "拨不通的电话信号\n丢失云层上\n孩子别紧张\n生活不是竞技场\n"; fputs(buf, fp); fclose(fp);}//从文件中按行读取void test01(){ FILE* fp = fopen("test.txt", "r"); if (fp == NULL) { printf("打开文件失败"); exit(1); } char buf[120]; while (fgets(buf, sizeof(buf), fp)) { printf("%s", buf); }}int main(){ test(); test01(); return 0;}
转载地址:http://vhwc.baihongyu.com/