注意事项
1. 使用 scanf 后一定要使用 fflush(stdin); 清空缓冲区,否则 \0 害死人。
2. 用作输入输出暂存的数组必须使用 char buffer[100] 如此定义,不可以 char *buffer ,否则 fgets 等函数会出现无法写入(不会报错)。
3.键盘输入可以用 fgets(buffer,LEN,stdin); 替代 scanf(); ,因为键盘输入也是一个文件,为 stdin 。
3. 常用函数的返回值:
函数名 | 成功 | 失败 |
fopen(FILE *stream); | 文件地址 | 0(NULL) |
fclose(FILE *stream) | 0 | -1(EOF) |
char *fgets(char *str, int n, FILE *stream); | str | 0(NULL) |
int fputs(const char *str, FILE *stream); | str | -1(EOF) |
源代码
#include <stdio.h>
#include <string.h>
int main()
{
int select;//功能选项
FILE *fp=NULL;//文件指针
char filename[20];//文件名字符串
char buffer[100];//输入输出暂存 !char *buffer 是错误的!!!
printf("***********************************\n\n");
printf(" 文 件 编 辑 系 统 1.0\n\n");
printf(" Design By Kinglake_W\n\n");
printf("***********************************\n\n");
printf("功能\n\n1. 读取文件\n\n2. 覆盖文件\n\n3. 追加文件\n\n4. 退出系统\n\n");
printf("***********************************\n\n");
printf("说明\n\n");
printf("1.输入数字 1、2、3、4 选择功能。\n\n");
printf("2.以 enter 提交输入,以 ctrl + Z 结束输入。\n\n");
do//-------------------------------------------------------------------------------
{
printf("***********************************\n\n");
printf("请选择功能:");
scanf("%d",&select);// r w a
fflush(stdin);// <----------------------------------------务必要清空缓冲区,否则 \0 害死人
printf("\n");
while(select!=1&&select!=2&&select!=3&&select!=4)
{
printf("输入错误,请重新选择功能:");
scanf("%d",&select);// r w a
}
switch(select){
case 1:
printf("***********************************\n\n");
printf("读取文件(r):\n\n");
printf("请输入要访问的文件名:");
gets(filename);
printf("打开%s中...\n",filename);
//判断文件是否存在
if(fp=fopen(filename,"r"))//若存在
{
printf("成功打开文件:%s!\n\n",filename);
//文件操作
fgets(buffer,100,fp);
if(buffer!=0)//成功读取
{
printf("内容如下:\n");
puts(buffer);
printf("\n");
}
else
printf("文件读取失败!");
}
else
{
printf("文件不存在!\n\n");
}
break;
case 2:
printf("***********************************\n\n");
printf("覆盖文件(w):\n\n");
printf("***********************************\n\n");
printf("请输入要访问的文件名:");
gets(filename);
printf("打开%s中...\n",filename);
//判断文件是否成功打开
//文件打开成功
if(fp=fopen(filename,"w"))//fopen 成功 = 地址 ,失败 = 0
{
printf("已打开%s\n\n",filename);
printf("请输入要覆盖的内容:");
printf("\n\n");
gets(buffer);
//文件操作
if(fputs(buffer,fp)!=EOF)
printf("写入成功!\n\n");
else
printf("写入失败!\n\n");
//关闭文件
if(fclose(fp)==0)
printf("文件已关闭!\n\n");
else
printf("文件关闭失败!\n\n");
}
//文件打开失败
else
{
printf("文件打开失败!\n\n");
}
break;
case 3:
printf("***********************************\n\n");
printf("追加文件(a):\n\n");
printf("***********************************\n\n");
printf("请输入要访问的文件名:");
gets(filename);
printf("打开%s中...\n",filename);
//判断文件是否成功打开
//文件打开成功
if(fp=fopen(filename,"a"))//fopen 成功 = 地址 ,失败 = 0
{
printf("已打开%s\n\n",filename);
printf("请输入要追加的内容:");
printf("\n\n");
gets(buffer);
//文件操作
if(fputs(buffer,fp)!=EOF)
printf("写入成功!\n\n");
else
printf("写入失败!\n\n");
//关闭文件
if(fclose(fp)==0)
printf("文件已关闭!\n\n");
else
printf("文件关闭失败!\n\n");
}
//文件打开失败
else
{
printf("文件打开失败!\n\n");
}
break;
case 4:
//关闭文件
if(fp!=NULL)//若文件指针不为空,则需要关闭文件
{
if(fclose(fp)==0)//关闭成功返回 0 ,失败返回 -1
{
printf("文件已关闭!\n\n");
}
else
{
printf("文件关闭失败!\n\n");
}
}
printf("退出系统!\n\n");
printf("***********************************\n\n");
break;
default:
printf("程序错误!");
return 0;
}// switch 结束
}while(select!=4);//-------------------------------------------------------------
return 0;
}
结果: