字符读写:
fgetc 调用形式fgetc(fp) 从fp指向的文件读入一个字符
fputc 调用形式fputc(ch,fp) 把字符ch写到文件指针变量fp所指的文件中
/*从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入“#”结束为止,这个程序只需要从键盘逐个输入字符,然后用fputc函数写到磁盘文件即可。字符数组filename用来存放文件名,也可以直接指定。*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("Input filename:");
scanf("%s", filename);
fp = fopen(filename, "w");//打开输出文件
if (!fp)//检查打开的操作是否有错
{
printf("file open failed!\n");
exit(0);//关闭所有文件使程序终止
}
ch=getchar();
printf("请输入一个准备存储到磁盘的字符串:");
ch = getchar();//接收从键盘输入的第一个字符
while (ch != '#')
{
fputc(ch,fp);//输出一个字符
putchar(ch);//将输出字符显示在屏幕上
ch = getchar();//接收字符
}
fclose(fp);
putchar(10);//向屏幕输出一个换行符,换行符的ASCII代码为10
}
将存入磁盘文件中的信息复制到另一个磁盘文件,从已有数据的磁盘文件中逐个读入字符,然后逐个输出到新复制的磁盘文件名
char srcName[20];
char desName[20];
printf("input src File Name:");
scanf("%s", srcName);
printf("input des File Name:");
scanf("%s", desName);
fpSrc = fopen(srcName, "r");//srcName为变量不可带""
fpDes = fopen(desName, "w");
if (!(fpSrc && fpDes))
{
printf("file open failed!");
}
while (!feof(fpSrc))//如果未遇到输入文件的结束标志
{
ch = fgetc(fpSrc);//从输入文件读入一个字符,暂放在变量ch中
fputc(ch, fpDes);//将ch写到目标文件
putchar(ch);//将ch显示在屏幕上
}
putchar(10);//显示完全部字符后换行
fclose(fpSrc);
fclose(fpDes);
二进制方式读写(数据块读写):
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
buffer:一个地址。对fread来说,是输入数据的存放地址;对fwrite来说,是要输出数据的地址(起始地址)
size:读写的字节数
count:要进行读写多少个size字节的数据项
fp:文件型指针
/*从键盘输入学生的有关数据,然后把它们转存到磁盘文件上*/
/*定义一个结构体数组stud,有size个元素,每个元素用来存放一个学生的数据。
假设学生的数据已存放在磁盘文件中,用fread函数读入学生的数据,用fwrite函数将内存中学生的数据输出到磁盘文件中*/
#include<stdio.h>
int main()
{
FILE *fp;
int score[5];
int i;
printf("input data array:\n");
for ( i = 0; i < 5; i++)
{
scanf_s("%d", &score[i]);
}
fp = fopen("score.dat", "wb");//以二进制方式写数据
if (!fp)
{
printf(" file open filed!");
}
fwrite(score,sizeof(int),5,fp);//输出数据
fclose(fp);
fp = fopen("score.dat", "rb");
int curScore;
while (!feof(fp))
{
fread(&curScore, sizeof(int), 1, fp);//从fp中读入一组数据
printf("%d\t",curScore);
}
fclose(fp);
return 0;
}
字符串读写:
fgets 调用形式fgets(str,n,fp) 从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中
fputs 调用形式fputs(ch,fp) 把字符str写到文件指针变量fp所指的文件中
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char str[3][10], temp[10];
int i, j, k;
int n = 3;
printf("Enter strings:\n");
for (int i = 0; i < n; i++)
{
//gets(str[i]);
scanf("%s",&str[i]);
}
for (i = 0; i < n - 1; i++)//用选择法
{
k = i;
for (j = i+1; j < n; j++)
{
if (str[k]>str[j])
{
k = j;
if (k != i)
{
strcpy(temp, str[i]);
strcpy(str[i], str[k]);
strcpy(str[k], temp);
}
}
}
}
if ((fp = fopen("score.dat", "w")) == NULL)
{
printf("cannot open file!");
exit(0);
}
printf("The new sequence:\n");
for (int i = 0; i < n; i++)
{
fputs(str[i], fp);
fputs("\n", fp);
printf("%s\n", str[i]);
}
return 0;
}