4.3-day13-C语言基础-对文件的输入输出
C语言基础-对文件的输入输出
数组名称也可以取地址,得到的地址数据和二维数组名称所代表的地址数据类似。对他们做加一操作时增加的是整个一维数组的大小。这样的地址数据可以赋值给数组指针变量,这种指针声明方法如下
int (*p_value)[5];
FILE结构体用来记录文件相关的信息
FILE结构体类型的指针变量叫做文件指针。
fopen函数可以打开一个文件并制作对应的FILE结构体变量,把结构体变量的地址作为返回值使用。如果执行失败则返回NULL。
使用fopen函数时需要指定文件的操作方式。操作方式由三部分构成,分别如下
第一部分有三个可选的字符'r', 'w'和'a'。这部分必须指定并且只能指定一个字符。
'r' 对文件进行读操作
'w' 对文件进行写操作。如果文件不存在则创建新文
件否则把原文件内容清除。
'a' 对文件进行写操作。如果文件已存在则会把新内
容追加在文件末尾
第二部分有一个可选字符'+',这部分可有可无。如果使用了这部分则表示对文件进行读写操作。
第三部分有一个可选字符‘b’,这部分可有可无。如果使用这部分则表示要对文件进行二进制操作。
fclose函数用于关闭一个文件,当程序不再使用某个文件的时候一定要使用这个函数关闭它。
fputc函数可以把一个字符写入到文件中,如果失败返回EOF。
fgetc函数可以从文件中读出一个字符并返回,如果超过文件尾部则返回EOF。
fwrite函数可以一次把数组中的多个变量以二进制方式写入到文件中,返回值表示写入的变量个数。
fread函数可以一次以二进制方式从文件中读出多个变量的数值并记录到数组中,返回值表示读入的变量个数。
FILE结构体中使用位置指针记录下次对文件进行读写操作的位置,每次对文件进行过读写操作后位置指针都会移动。
rewind函数可以把位置指针移动到文件开头
fputs函数可以把一个字符串写入到文件中。fgets函数可以从文件中读出一个字符串。
fprintf函数可以把数据以指定的格式写入到任何文件中。
fscanf函数可以从任何文件中以指定的格式读入数据到变量中。
01ptr.c
/*数组指针练习*/#include<stdio.h>int main(){int value[5]={0};int values[3][4]={0};int*p_value = value;int(*p_value1)[5]=&value;printf("value是%p\n", value);printf("&value是%p\n",&value);printf("value + 1是%p\n", value +1);printf("&value + 1是%p\n",&value +1);aprintf("values是%p,values + 1是%p\n", values, values +1);printf("p_value1是%p,p_value1 + 1是%p\n", p_value1, p_value1 +1);return0;}
数组地址:编译器来提供的,瞎编的;
变量的地址是真正存在的;
二维数组加1, 1是整个一维数组大小;
一维数组加1, 1是一个变量的大小;
02file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;p_file = fopen("a.txt","w");if(p_file){//文件操作语句fclose(p_file);p_file = NULL;}return0;}
FILE *p_file = NULL; 文件指针;
p_file = fopen("文件路径", “文件的操作方式”);
- 把字符“1”写入文件,文本文件操作方式,“1”是给人看的;
03file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;char str[]="abcdef";int loop =0;p_file = fopen("a.txt","w");if(p_file){//文件操作语句while(str[loop]){if(EOF == fputc(str[loop], p_file)){break;}loop++;}fclose(p_file);p_file = NULL;}return0;}
fputs函数可以把一个字符串写入到文件中。
fgets函数可以从文件中读出一个字符串。
fclose函数用于关闭一个文件,当程序不再使用某个文件的时候一定要使用这个函数关闭它。
04file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;p_file = fopen("a.txt","r");if(p_file){//文件操作语句char ch =0;do{ch = fgetc(p_file);if(EOF != ch){printf("%c", ch);}}while(EOF != ch);printf("\n");fclose(p_file);p_file = NULL;}return0;}
fgetc函数可以从文件中读出一个字符并返回,如果超过文件尾部则返回EOF
05file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL,*p_file1 = NULL;p_file = fopen("a.txt","r");if(p_file){p_file1 = fopen("b.txt","w");if(p_file1){char ch =0;do{ch = fgetc(p_file);if(EOF != ch){if(EOF == fputc(ch, p_file1)){break;}}}while(EOF != ch);fclose(p_file1);p_file1 = NULL;}fclose(p_file);p_file = NULL;}return0;}
06file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;p_file = fopen("a.bin","wb");if(p_file){//文件操作语句int num = fwrite(values,sizeof(int),5, p_file);printf("共写入%d个整数变量\n", num);fclose(p_file);p_file = NULL;}return0;}
fwrite函数可以一次把数组中的多个变量以二进制方式写入到文件中,返回值表示写入的变量个数。
可选字符“+”,如果使用了这部分则表示对文件进行读写操作;
可选字符“b” ,如果使用 这部分则表示对文件进行二进制操作。
07file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;int values[5]={0}, loop =0;p_file = fopen("a.bin","rb");if(p_file){//文件操作语句int num = fread(values,sizeof(int),5, p_file);printf("共读出%d个整数变量\n", num);for(loop =0; loop <=4; loop++){printf("%d ", values[loop]);}printf("\n");fclose(p_file);p_file = NULL;}return0;}
fread函数可以一次以二进制方式从文件中读出多个变量的数值并记录到数组中,返回值表示读入的变量个数。
08file.c
/*文件练习*/#include<stdio.h>int main(){FILE*p_file = NULL;p_file = fopen("a.txt","r");if(p_file){//文件操作语句fseek(p_file,2, SEEK_SET);printf("%c ", fgetc(p_file));//rewind(p_file);fseek(p_file,1, SEEK_CUR);printf("%c ", fgetc(p_file));//rewind(p_file);fseek(p_file,-3, SEEK_END);printf("%c ", fgetc(p_file));printf("\n");fclose(p_file);p_file = NULL;}return0;}
fseek函数可以把位置指针移动到任何地方
SEEK_SET 0 代表文件开头
SEEK_CUR 1 位置指针当前位置
SEEK_END 2 代表文件结尾
位置指针挪动到文件头后面2个字节的位置;
fseek (文件指针,相对距离,代表文件头的宏)
-3表示往前跳;
09max.c
/*变长参数练习*/#include<stdio.h>#include<stdarg.h>int max(int cnt,...){int ret =0, loop =0;va_list v;va_start(v, cnt);for(loop =0; loop < cnt; loop++){int value = va_arg(v,int);if(value > ret){ret = value;}}va_end(v);return ret;}int main(){printf("max(2, 9, 6)是%d\n", max(2,9,6));printf("max(3, 19, 25, 2)是%d\n", max(3,19,25,2));return0;}
int max( ) 不确定个数的参数,必须要有一个参数, int cnt;
int max (int cnt, ......) 要包含头文件, #include <stdarg.h>
va_list v; 通过它获得其他不确定的参数;
va_start (v, cnt) ; 通过V获得cnt之后的参数;
va_end(v); 做一个清理;
10func.c
/*函数练习*/#include<stdio.h>#include<stdlib.h>int main(){char str[20]={0};char ch =0;float f_value =0.0f;int value = atoi("234");double d_value = atof("23.4");printf("value是%d\n", value);printf("d_value是%lg\n", d_value);scanf("25.8 a","%g %c",&f_value,&ch);printf("%c %g\n", ch, f_value);sprintf(str,"%c %g", ch, f_value);printf("%s\n", str);return0;}
把字符串转换成整数变量"234";
int value = atoi("234");
atof("23.4");
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
浙公网安备 33010602011771号