2.fgets使用
从文件或者键盘读取输出到程序。
int ch = fgetc(pf); printf("%c", ch);
从键盘读:
int ch = fgetc(stdin); printf("%c", ch);
输入gggg
读取一个字符g
📌2.2 文本行输入输出函数
1.fputs
函数
将字符串输出到文件中
int fputs ( const char * str, FILE * stream );
参数:
1.
str
:要输入的字符串,2.
stream
:指向文件流的指针返回值; 成功时,将返回非负值。 出错时,该函数返回 EOF 并设置错误指示器(ferror)。
功能:该函数从指定的地址 (str) 开始复制,直到到达终止空字符 (‘\0’)。此终止空字符不会复制到流中。
fputs使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { FILE* pf = fopen("test7.20.txt", "w"); if (pf == NULL) { perror(fopen); return 1; } int ch = fputs("hello jiji",pf); fclose(pf); pf = NULL; return 0; }
注意:1.多次输入,如果字符串后没有’\n’则会在一行。
2.输入后关闭文件,在进行输入就会覆盖以前的内容
3.int ch = fputs(“hello jiji”,stdout);一样可以打印到屏幕。
2.fgets
函数
将键盘或者文件中的字符串输入到程序。
char * fgets ( char * str, int num, FILE * stream );
参数:
1.
str
:指向在其中复制字符串读取的字符数组的指针。2.
num
:要复制到 str 的最大字符数(包括终止空字符)。3.
stream
:指向标识输入流的 FILE 对象的指针。stdin 可以用作从标准输入读取的参数。
返回值: 成功后,函数返回 str。失败:NULL;
**功能:**把从stream中读到的num个字符存到str中。输入。
fgets函数的使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { FILE* pf = fopen("test7.20.txt", "r"); if (pf == NULL) { perror(fopen); return 1; } char ch[10] = { 0 }; fgets(ch, 10, pf); printf("%s",ch); fclose(pf); pf = NULL; return 0; }
核心代码
char ch[10] = { 0 }; fgets(ch, 10, pf); printf("%s",ch);
文件中存放10个字符
这里只是打印9个,为什么呢?
int i = strlen(ch); printf("%d", i);
fgets函数只能读取num-1 个字符,末尾要空出来放’\0’。
我用strlen函数测了显示数组中只有9,说明最后一位就是放的’\0。
另外:fgets当遇到'\0'
,'\n'
时都会停止读取。
📌2.3 格式化输入输出函数
1.fscanf函数
从文件或者键盘读取输入到程序中。
标准格式:
int fscanf ( FILE * stream, const char * format, ... );
功能:从流中读取输入到程序中。
使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct S { int a; float b; }; int main() { FILE* pf = fopen("test7.20.txt", "r"); if (pf == NULL) { perror(fopen); return 1; } struct S s = { 0 }; fscanf(pf, "%d %f", &(s.a),&( s.b)); printf("%d %f", s.a, s.b); fclose(pf); pf = NULL; return 0; }
关键代码:
struct S s = { 0 }; fscanf(pf, "%d %f", &(s.a),&( s.b)); printf("%d %f", s.a, s.b);
2.fprintf函数
将格式化数据流 输出到文件或者屏幕
int fprintf ( FILE * stream, const char * format, ... );
功能:将数据流stram输出到文件或者屏幕上。
使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct S { int a; float b; }; int main() { FILE* pf = fopen("test7.20.txt", "w"); if (pf == NULL) { perror(fopen); return 1; } struct S s = { 98,1.11f }; fprintf(pf, "%d %f", s.a, s.b); fclose(pf); pf = NULL; return 0; }
📌2.4二进制输入输出函数
1.fwrite函数
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
参数:
1.ptr
:指向的数据要被写入文件。
2.size
:要写入的每个元素的大小(以字节为单位)。
3.count
:元素数,每个元素的大小为字节大小。
4.stream
:指向指定输出流的 FILE 对象的指针。
功能::从ptr读取数据放入到文件流中
使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct S { int a; float b; }; int main() { FILE* pf = fopen("test7.20.txt", "wb"); if (pf == NULL) { perror(fopen); return 1; } struct S s = { 1,3.24f }; fwrite(&s,sizeof(struct S),1,pf); fclose(pf); pf = NULL; return 0; }
核心代码:
fwrite(&s,sizeof(struct S),1,pf);
文本中保存的时二进制,所以会出现乱码。
2.fread函数
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
功能:从流中读取计数元素数组,每个元素的大小为字节,并将它们存储在 ptr 指定的内存块中
使用
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct S { int a; float b; }; int main() { FILE* pf = fopen("test7.20.txt", "rb"); if (pf == NULL) { perror(fopen); return 1; } struct S s = { 0}; fread(&s,sizeof(struct S),1,pf); printf("%d %f", s.a,s.b); fclose(pf); pf = NULL; return 0; }
核心代码:
fread(&s,sizeof(struct S),1,pf);
各位看官老爷,咱下回再见!
别忘了点赞关注加评论哟
💙 💜 ❤️ 💚 💔 💓 💗 💕 💞 💘 💖 ✨ ⭐️ 🌟