4. 文件的顺序读写
这些函数的意义:一般与上面fopen的打开方式是相对应的,以什么打开方式就赋予了这个pf指针什么样的权限。
功能 |
函数名 | 适用于 |
字符输入函数 |
fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 |
fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 |
fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 |
fread | 文件 |
二进制输出 | fwrite | 文件 |
1.fputc写文件--字符输出函数
fputc('a' + i,pf);//此函数一次写一个字符,所以需要一个循环来输出26个字符
文献:
翻译:
代码实例:
//fputc 写文件 #include<stdio.h> int main() { FILE* pf = fopen("test.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //写文件 int ch = 0; int i = 0; for (i = 0; i < 26; i++) { fputc('a' + i,pf);//此函数一次写一个字符,ascll码值+1 } //关闭文件 fclose(pf); pf = NULL; return 0; }
效果:
2.fgetc(pf)读文件--字符输入函数
ch = fgetc(pf);//此函数一次读取一个字符
可以看以下执行效果:
文献:
翻译:
代码实例:
//fgetc - 读文件操作 #include<stdio.h> int main() { FILE* pf = fopen("test.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } //读文件 //把26个字面写到文件中 int ch=0;//看上面的文献,所以为什么这个地方会用int接收 //printf("%c\n", ch); int i = 0; for (i = 0; i < 26; i++) { ch = fgetc(pf);//此函数一次读取一个字符 printf("%c ",ch);//ascll码值+1 } //关闭文件 fclose(pf); pf = NULL; return 0; }
代码执行:注意前提是这个文件里面有内容,否则不会输出任何东西
执行:
为什么pf不能++
如果加入一行代码:pf++
原因:对于文件指针进行++操作是不允许的,语法不支持
3.fputs--文本行输出函数
文献:
翻译:
代码实现:
//fputs 写一行数据 #include<stdio.h> int main() { FILE* pf = fopen("test.txt", "w");//这里写文件名的话默认是在这个工程底下搞的,写成绝对路径或者其它相对路径,要指定 if (pf == NULL) { perror("fopen"); return 1; } //写一行数组 hello bit fputs("hello bit\n", pf); fputs("hello world\n", pf); // 关闭文件 fclose(pf); pf = NULL; return 0; }
输出不换行:
fputs("hello bit", pf);
fputs("hello world\n", pf);
输出换行: 上面的代码可参考
4.fgets--文本行输入函数
文献:
翻译:
代码实例:以下注释说明了为什么打印hell
//fgets - 读一行数据 int main() { FILE* pf = fopen("test.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } //读 char arr[20]; fgets(arr,5, pf);//在.txt文件有内容的情况下,这里的参数5说明最多读4个,最后一个位置是留给'\0'的 printf("%s\n", arr); //关闭文件 fclose(pf); pf = NULL; return 0; }
执行: