文件相关函数的总结与记忆
1.字符的输入输出
char ch = getchar();//不需要传递参数
putchar('a')
putc、getc与fputc、fgetc一致
//必须用int接受,因为返回int类型,char因为编译器不同而可能为无符号和有符号
int ch
if( (ch = getchar() ) != EOF)
2.行的输入输出
也可以用于二进制的流,但是多数用于文本流
//对于stdio、stdout
puts("ashore");
char string [256];
//不接受\n,追加\0字符串结束符
gets (string);
//对于fp
fputs("Hello world",fp);
//读入sizeof(str) -1 个字符或者\n 停止,追加\0字符串结束符,\n会被接收
fgets(str,sizeof(str),fp);
3.块的输入输出
//返回均是成功写入或者读入的元素数量,小于指定数量,说明遇到错误,feof结合ferror判断
fwrite(a, sizeof(a[0]), sizeof(a)/sizeof(a[0]),fp);
fread(a, sizeof(a[0]), sizeof(a)/sizeof(a[0]),fp);
小总结:字符、行、块的输入输出fp均放在最后,块输入输出另一个文件流放在首位,接着是数量(数理解为单个元素字节数,量理解为元素数量)
4.文件定位
//SEEK_END,SEEK_CUR,SEEK_END,偏移量可以为负数
fseek(fp, -1, SEEK_END);
//告知文件偏移起始位置的字节数
ftell(fp)
//等价于fseek(fp, 0, SEEK_SET);
rewind(fp)
5.fprintf和fscanf
//注意fscanf和sprintf返回值均是成功写入或者读取的数据项个数
char str [80];
float f;
FILE * pFile;
pFile = fopen ("myfile.txt","w+");
fprintf (pFile, "%f %s", 3.1416, "PI");
rewind (pFile);
fscanf (pFile, "%f", &f);
fscanf (pFile, "%s", str);
//循环读取文本文件单个单词
if(fscanf(fp,"%19s",buff) == 1)
总结:文件定位和文件格式化输入输出这几个fp都是放在首位,与前面字符、块、行fp所在位置不同