c读写文件
//如何读写文件字符,使用gets(),puts(),fgets(),fputc()函数
//gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符,和puts配合使用
//从严格程度讲,gets(s)函数<scanf("%s",s),后者遇到空格会认为字符串结束
//puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。
//fputs是一种函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为0;否则返回EOF(//符号常量,其值为-1)。
//从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足b//ufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets//的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror//函数来判断。
#include <stdio.h> #include<string.h> #include <stdlib.h> int main() { FILE *fp; char str[100]; if ((fp = fopen("al", "w")) == NULL) { printf("can not open file\n"); exit(0); } printf("input a string:"); gets(str); printf("debug:"); puts(str); int i=0; while (str[i] != '!') { if (str[i] >= 'a'&&str[i] <= 'z') { str[i] = str[i] - 32; fputc(str[i], fp); } i++; } fclose(fp); if ((fp = fopen("al", "r")) == NULL) { printf("can not open file\n"); exit(0); } fgets(str, strlen(str) + 1, fp); printf("%s\n", str); fclose(fp); return 0; }