头文件解释
stdlib 头文件即standard library标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数。standard library标准库头文件的类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容可以打开编译器的include目录里面的stdlib.h头文件查看。
Cannot open file strike any key exit!翻译:不能打开文件任何窗口。
Return和exit(0),exit(1)的区别
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
详细说:
1. return返回函数值,是关键字; exit 是一个函数。
2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3. return是函数的退出(返回);exit是进程的退出。
4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。
5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。
6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。
C语言检索文件只能在当前文件夹进行检索
1和l不混淆;两个等于号之间不能有空格
12.1.4 文件的打开与关闭
Fopen函数用来打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);
其中,“文件指针名”必须是被说名为FILE类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。
“文件名”是字符串常量或字符串数组。
例如:FILE *fp;
fp=fopen("file_project","r");
其意义是在当前目录下打开文件file_project,只允许进行“读”的操作,并使fp指向该文件。
又如:
FILE *fp
fp=fopen("c:\\file_project","rb");
其意义是打开C驱动器磁盘的根目录下的文件file_project,这是一个二进制文件,只允许按二进制的方式进行读操作。两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录。
使用文件内的方式共有12种,见表12.1
文件使用方式 意义
"rt" 只读打开一个文本文件,只允许读取数据
"wt" 只写打开或建立一个文本文件,只允许写数据
"at" 追加打开一个文本文件,并在文件末尾写数据
"rb" 只读打开二进制文件,只允许读取数据
"wb" 只写打开或建立一个二进制文件,只允许读取数据
"ab" 追加打开一个二进制文件,并在文件末尾写数据
"rt++" 读写打开一个二进制文件,并在文件末尾写数据
"wt++" 读写打开或建立一个文本文件,允许读写
"at++" 读写打开一个文本文件,允许读,或在文件末尾追加数据
"rb++" 读写打开一个二进制文件,允许读和写
"wb++" 读写打开或建立一个二进制文件,允许读写
"ab++" 读写打开一个二进制文件,允许读,或在文件末尾追加数据
一些英语单词和注释
read 读
write 写
append 追加
text 文本文件,可省略不写
binary 二进制文件
+:读和写
if((fp=fopen("c:\\file_project","rb"))==NULL))
{printf("eroe on open c:\\file_project!");
getch();
exit(1);
}
2.文件关闭函数(fclose函数)
文件一旦使用完毕,需要采用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。
fclose函数调用的一般形式是:
fclose(文件指针);
例如:
fclose(fp);
正常完成关闭文件操作时,fclose函数的返回值为0.如返回非零值则表示有错误发生。
12.2.1程序解析——读取工程文件
(1)字符读写函数:fgetc和fputc.
(2)字符串读写函数:fgets和fputs.
(3)数据块读写函数:freed和fwrite.
(4)格式化读写函数:fscanf和fprintf.
使用以上函数都要求包括头文件stdio.h
FILE *fp;//文件指针 很关键 没有定义文件指针读不出程序
小科普:二进制文件
包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。
第一讲(字符读写函数)
读字符函数:fgetc()
字符变量=fgetc(文件指针);
eg.ch=fgetc(fp);
1.必须是以读或读写的方式打开
2.读取的字符结果也可以不向字符变量赋值
e.g.fgetc(fp);
3.文件内部有位置指针,用来指向文件的当前读写字节。文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。
写字符函数:fputc()
功能:把一个字符写入指定的文件中,调用的形式为
fputc(字符量,文件指针);
其中,待写入的字符量可以是字符常量或变量,例如:
fputc('a',fp);
其意义是把字符a写入fp所指向的文件中。
1.被写入的文件可以用写,读写,追加方式打开,写或读写方式打开一个已经存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。
2.每写入一个字符,文件内部位置指针向后移动一个字节。
3.fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF,可用此来判断写入是否成功。
第二讲(字符串读写函数)
字符串读写函数fgets(从指定的文件中读一个字符串到字符数组中)
调用形式:fgets(字符数组名,n,文件指针);
N为整数,不超过n-1个字符,在读入最后一个字符后加上串结束标志‘\0‘。
例12.5
字符串读写函数fputs(向指定的文件写入一个字符串)
调用形式:fputs(字符串,文件指针);
可以是字符串常量,也可以是字符数组名或指针变量。
例. fputs("abcd",fp);
其意义是把字符串"abcd"写人fp所指的文件之中。
例12.6
第三讲(数据块读写函数)
数据块读函数fread
读数据块函数调用的一般形式为∶ fread(buffer,size,count,fp)
fread()——从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节
数据块写函数fwrite
写数据块函数调用的一般形式为∶ fwrite(buffer,size,count,fp)
fwrite()——从buffer开始,—次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动 size* count个字节
例12.7
第四讲(格式化读写函数)
格式化读写函数fscanf和fprintf
fscanf函数、fprint函数与前面使用的scanf和printf函数的功能相似,都是格式化读写函数。两者的区别在于fscanf函数和fprint函数的读写对象不是键盘和显示器,而是磁盘文件
这两个函数的调用格式为∶
fscanf(文件指针,格式字符串,输入表列); fprintif(文件指针,格式字符串,输出表列);
例12.8
读 / 写函数的选用原则
读/写1个字符(或字节)数据时∶选用fgetc()和iputc()函数
读/写1个字符串时∶选用fgets()和fputs()函数读/写1个(或多个)不含格式的数据时∶选用fread()和fwrite()函数
读/写1个(或多个)含格式的数据时∶选用 fscanf()和fprintf()函数
12.3文件的随机读写
改变文件位置指针函数fseek()
fseek函数的调用形式∶ fseekfp,offset,position);其中∶fp为文件型指针;position为起始点,指出以文件的什么位置为基准进行移动
例12.9
位置指针重返文件头函数rewind()
rewind函数的调用形式∶ rewind(fp);
其中∶ fp为文件型指针
rewind函数的功能是∶使fp指定的文件的位置指针重新定位到文件的开始位置
例12.10
3.位置指针当前值函数ftell()
例12.11
4.文件的随机读写
在学生文件stu list中读出第二个学生的数据
FILE *fp;
int i=1; s1=&stu;
iffp=fopen("stu_list","rb"))==NULL){
printf("Cannot open file !"); exit(1);} rewind(fp);
fseek(fp,i*sizeof((struct stu)),0); fread(s1,sizeof(struct stu),1,fp); printf("name\tnumber age addr\n");
printf("%s\t%5dt%5dt%sn",s1->name,s1->num,s1->age,s1->addr);
例12.12
12.4文件检测函数
C语言中常用的文件检测函数有以下几个。
12.4.1文件结束检测函数feof函数
feof函数调用格式:
feof(文件指针);
功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
一般是读写。
12.4.2读写文件出错检测函数ferror函数
ferror函数调用格式:
ferror(文件指针);
功能:检查文件在用各种输人输出丽数进行读写时是否出错。如ferror返回值为0表
示未出错,否则表示有错。
12.4.3文件出错标志和文件结束标志置0函数clearerr函数
clearerr函数调用格式:
clearerr(文件指针);
功能:本函数用于清楚标志和文件结束标志。使它们为0值。