#include <stdio.h>
#include <stdlib.h> //exit(0),退出程序
/// ?<文件的简单操作>? <?要点 ?>
/// #1 <fopen与fopen_s>
/// 【fopen_s比fopen 多了溢出检测,更安全一些】
/// fp=fopen("文件名","打开方式");
/// fopen 打开文件成功则返回文件指针赋值给fp,失败的话返回空指针
/// errno_t err;
/// err=fopen_s(指针地址, "文件名", "打开方式");
/// fopen_s 打开文件成功返回0给errno_t类型的变量,失败的话则返回非零值
///
/// #2 <初始化字符串数组>
/// char fname[50]={0};
/// 在定义字符串数组时将其定义为0,消除字符串没有零终止符的警告。
///
/// #3 <文件的读与写>
/// EOF(End Of File)【#define EOF -1】是《文本文件》结束的标志, 在文本文件中字符以ASCII码表示,不可能出现-1.
/// 在向文件输入数据时,是先将数据输出到缓冲区,待缓冲区满后再正式输出文件,所以先fclose关闭文件先把缓冲区的文件输出到磁盘文件。
///
int main()
{
FILE* fp;
errno_t err;
char ch, fname[50] = { 0 }; //初始化字符串数组为零,消除字符串没有零终止符的警告
int a;
printf("请输入要打开或要创建的文件名");
scanf_s("%s",fname,sizeof(fname));
if ((err = fopen_s(&fp, fname, "a+") == 0))
printf("打开文件%s成功", fname);
else
{
printf("打开文件%s失败", fname);
exit(0);
}
//在这里写入字符到文件fname
printf("请输入字符");
/*!!!!!!在这里添加一个getchar接收回车键,防止下一步的while直接终止!!!!!*/
a=getchar();
ch = getchar(); /*从键盘上键入一个字符赋值给ch*/
while (ch != '\n') //接收到回车键后终止循环
{
fputc(ch, fp);
ch = getchar();
}
fclose(fp); //关闭文件,即指针不再指向该文件
//写文件完成后,要关闭文件才能读文件
//重新打开文件
printf("请输入要打开或要创建的文件名");
scanf_s("%s", fname, sizeof(fname));
if ((err = fopen_s(&fp, fname, "a+") == 0))
printf("打开文件%s成功", fname);
else
{
printf("打开文件%s失败", fname);
exit(0);
}
//在这里从指定文件中读取字符
ch = fgetc(fp);
/*字符不是文件结束的标志,则把字符显示在屏幕上,继续读取下一个字符*/
while (ch != EOF)
{
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
return 0;
}
新手上路
|