1. 几个主要的函数
puts 向屏幕输出一行,自动增加换行符
gets 从键盘读取一行,丢弃换行符,替换为\0
fgets 从文件中读取一行,将换行符作为字符串的一部分,保留末尾的换行符。
fputs 从文件中写入一行,不会再末尾添加换行符
getc 从键盘读取一个字符
putc 从屏幕输出一个字符
getchar 等价于getc(stdin)
outchar 等价于putc(c, stdout)
fgetc 从文件中读取字符(char),等价于getc
fputc 从文件中写入字符(char)
fread 从文件到内存
fwrite 从内存到文件
2. EOF
EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。实际上 EOF 的值通常为 -1,但它依系统有所不同。
#include <stdio.h>
int main(void){
int n,i;
int array[25];
while(scanf("%d",&n)!=EOF){
for (i=0; i<n; i++)
scanf("%d",&array[i]);
for (i=0; i<n; i++)
printf ("%d ",array[i]);
}
return 0;
}
3. 循环读取文件
FILE* fileIn;
FILE* fileOut;
char c;
while((c=fgetc(fileIn))!=EOF){
putchar(c);//输出到屏幕
fputc(c,fileOut);}//输出到文件
4. 文件的读写指针
当我们对文件进行读写操作时,内核会记录当前的位置,但是尴尬的是这个位置是读写公用的(我记得java中是个指针,指向当前的位置)
int feek(FILE* steam, long offset, int whence)
whence取值: SEEK_SET从头开始 SEEK_CUR从当前开始 SEEK_END从末位开始
long ftell(FILE* stream) 取得当前读写位置
void rewind(FILE* stream) 把当前文件读写位置设为文件开头
#include <stdio.h>
int main(void){
FILE* fp = fopen("file", "r+");
char c10, c20;
if (fp == NULL) {
printf("filed");
return 1; }
fseek(fp, 9, SEEK_SET);
c10 = fgetc(fp);
fseek(fp, 9, SEEK_CUR);
c20 = fgetc(fp);
fseek(fp, -11, SEEK_CUR);
fputc(c20, fp);
fseek(fp, -8, SEEK_END);
fputc(c10, fp);
return 0;
}
5. fread 和fwrite
fread 从文件到内存
fwrite 从内存到文件
#include <stdio.h>
typedef struct person{
char name[20];
char gender;
int age;
double salary;
}person;
int main(void){
person p[5] = {{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000},{"alksjdl", 'f', 25, 5000}};
int b[10] = {};
short s = 0;
FILE* fp = fopen("person.kkd", "wb");//设置为强制原样操作
if(fp == NULL){
printf("error");
return 1;
}
fread(p, sizeof(person), 5, fp);
fread(b, sizeof(int), 10, fp);
fread(&s, sizeof(short), 1, fp);
fclose(fp);
return 0;
}