【C语言】文件操作 ( FILE ) 注意事项。附示例程序:文件管理系统2.0

注意事项

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);str0(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;
}

结果:

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言编程注意事项 1. 每个程序中一定包含main()函数, 尽管C语言中对函数命名没有限制。 2. printf函数永远不会自动换行, 只能用\n来实现, 回车键进行的换行在编译中会出现错误信息。 3. 在vs2008等平台中编译、测试要加 system("pause"); 来暂停dos自动退出引起的printf无法显示。 4. 所有自定义变量必须声明才能使用。 5. 每行一般只写一条语句, 在运算符两边加一个空格, 便于阅读。 6. 整数除法将会自动舍位, 不进行四舍五入的操作。 7. for(初始化部分;条件部分;增长部分) 比while 更适用于初始化和增长步长都是单条语句的情况。 8. 使用 #define 名字替换文本对部分"幻数" 赋予意义便于阅读 #define结尾无需;号来结束。 9. EOF(end of file)表示没有字符输入时定义在stdio.h 头文件EOF不等于\n 换行等。 10. 由于!= 的优先级大于 = ,因此如果对判断中存在变量赋值时 应对赋值加() 例如: while((c = getchar()) != EOF)。 11. getchar() 用于用户输入直至键入回车键。 12. 变量名以字母和数字组成, (下划线"_"被默认为字符, 以下划线为首写字母的为库类变量名), 变量常以小写字母开头,内部变量名前31位有效, 外部变量名至少前6位保持唯一性。 13.在C语言中是区分字母大小写的。 14. 一个字符常量为一个整数, 用''单引号括起来。例如: '0' 为48, 它与0没有任何关系。 15. ANSI C语言的转义符: \a 响铃符; \b 回退符; \f 换页符; \n 换行符; \r 回车符; \t 横向制表符 ; \v 纵向制表符; \\ 反斜杠; \? 问号; \' 单引号; \" 双引号; \ooo 八进制数; \xhh 十六进制数; '\0' 表示0, 即(null)。 16. 'x'与"x"的区别: 'x'表示一个整数, 字母x在其字符集中对应的数值, "x"表示包含一个字符x 以及一个结束符'\0'。 17. const在声明变量中起限制作用, 该限定变量的值不能被修改。 18. %运算符不能应用于float或double类型。 19. char类型转换为int型时, 因为无法判断它是signed还是unsigned,这样其结果有可能为负数, 所以转换时尽量指定signed和unsigned限制符。 20. ++i与i++ 的不同之处: ++i是先 +1再使用i, i++ 是先使用i再 +1。 21. 三元运算符"?:" 第一个表达式的括号不是必须的, 但是由于三元表达式的优先级非常低, 因此我们还是将第一个表达式用()括起来以便于阅读和理解。 22. C语言中可以使用递归 (即函数调用自身函数), 这样做并不节省储存空间也不加快执行速度, 只是使程序紧凑便于理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值