//如何读写文件字符,使用gets(),puts(),fgets(),fputc()函数
//gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加' '字符,和puts配合使用
//从严格程度讲,gets(s)函数<scanf("%s",s),后者遇到空格会认为字符串结束
//puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。
//fputs是一种函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘ ’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为0;否则返回EOF(//符号常量,其值为-1)。
//从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋' '),如果文件中的该行,不足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
");
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
");
exit(0);
}
fgets(str, strlen(str) + 1, fp);
printf("%s
", str);
fclose(fp);
return 0;
}