ファイルの例
18370 ワード
例12.1キーボードからファイルに文字を入力するプログラムを作成します.ファイルポインタfpを定義する. fopen()関数の戻り値を判断することによりfileを決定する.txtが正常に開くかどうか 入力文字をfpが指すファイルに と書く. fclose()関数を使用してファイルポインタ を閉じる
例12.2 fputc()関数を使用して、「*」が発生するまで一連の文字列をファイルに書き込む
例12.3ディスクにcfileという名前がある.txtのテキストファイルは、作成プログラムがそのファイルのすべての内容を読み出す.
例12.4既存のdata.txtには10人の学生の情報が格納され,プログラムを記述してファイルの内容を読み出し,画面に表示する.
例12.5変形例12.4は、キーボードから10人の学生の情報を入力し、これらの情報をテキストに書き込むことを実現する.
例12.6 fprintf()関数を用いて、複数の学生の情報をファイルに書き込む.
例12.7 dataからtxtファイルから画面に情報を読み込む
例12.8ディスクからファイルを読み込んで画面に表示し、そのファイルの内容を別のファイルにコピーします.
例12.10既存のディスクファイルfile.txt、その内容は以下の通りです.
例12.11ディスク内の1つのファイルの内容を別のファイルにコピーします.
例12.12既存の文書には、名前、学号、および4科目の成績を含む10名の学生の情報が記録されており、文書からデータを読み出し、4科目の平均成績を計算し、別の文書に書くことが要求されている.
1、f関数は1つのパラメータ2を受け入れず、doubleからfloatに変換するとデータが失われる可能性がある3、fopen 4、fscanf()5、フォーマット文字列%fはタイプfloatのパラメータを必要とするが、可変パラメータ1はタイプint 6、
#include
void main()
{
FILE *fp;
char c;
printf(" :");
scanf("%c",&c);
if ((fp = fopen("file.txt", "w")) == NULL)
{
printf("
");
exit(1);
}
fputc(c,fp);
fclose(fp);
}
例12.2 fputc()関数を使用して、「*」が発生するまで一連の文字列をファイルに書き込む
#include
#include
void main()
{
FILE *fp;
char c;
if ((fp = fopen("file.txt", "w")) == NULL);
{
printf("
");
exit(1);
}
c = getchar();
while (c != '*')
{
fputc(c, fp);
c = getchar();
}
fclose(fp);
}
例12.3ディスクにcfileという名前がある.txtのテキストファイルは、作成プログラムがそのファイルのすべての内容を読み出す.
#include
#include
void main()
{
FILE *fp;
char c;
if ((fp = fopen("cfile.txt", "r")) == NULL)
{
printf("
");
exit(1);
}
c = fgetc(fp);
while (c != EOF)
{
putchar(c);
c = fgetc(fp);
}
fclose(fp);
}
例12.4既存のdata.txtには10人の学生の情報が格納され,プログラムを記述してファイルの内容を読み出し,画面に表示する.
#include
#include
struct st
{
char name[20];
int age;
char sex;
float score;
}s[10];
void main()
{
FILE *fp;
int i;
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("
");
exit(1);
}
for (i = 0; i < 10; i++)
{
fread(&s[i], sizeof(struct st), 1, fp);
}
for (i = 0; i < 10; i++)
printf("%s %d %c %f
",s[i].name,s[i].age,s[i].sex,s[i].score);
fclose;
}
例12.5変形例12.4は、キーボードから10人の学生の情報を入力し、これらの情報をテキストに書き込むことを実現する.
#include
#include
struct st
{
char name[20];
int age;
char sex;
float score;
}s[10];
void main()
{
FILE *fp;
int i;
if ((fp = fopen("student.txt", "w")) == NULL)
{
printf("
");
exit(1);
}
for (i = 0; i < 10; i++)
scanf("%s %d %c %f", s[i].name, &s[i].age, &s[i].sex, &s[i].score);
for (i = 0; i < 10; i++)
fwrite(&s[i],sizeof(struct st),1,fp);
fclose(fp);
}
例12.6 fprintf()関数を用いて、複数の学生の情報をファイルに書き込む.
#include
#include
struct st
{
char name[20];
int age;
char sex;
float score;
}s[5];
void main()
{
FILE *fp;
int i;
if ((fp = fopen("stud.txt", "w")) == NULL)
{
printf("
");
exit(1);
}
for (i = 0; i < 5; i++)
scanf("%s%d%c%f",s[i].name,&s[i].sex,&s[i].score);
for (i = 0; i < 5; i++)
fprintf(fp,"%s %d %c %f",s[i].name,s[i].age,s[i].sex,s[i].score);
fclose(fp);
}
例12.7 dataからtxtファイルから画面に情報を読み込む
#include
#include
struct st
{
char name[20];
int age;
char sex;
float score;
}s[5];
void main()
{
FILE *fp;
int i;
if ((fp = fopen("stud.txt", "w")) == NULL)
{
printf("
");
exit(1);
}
for (i = 0; i < 5; i++)
fscanf(fp,"%s %d %c %f",s[i].name,&s[i].age,&s[i].sex,&s[i].score);
for (i = 0; i < 5; i++)
printf("%s,%d %c %f
",s[i].name,s[i].age,s[i].sex,s[i].score);
fclose(fp);
}
例12.8ディスクからファイルを読み込んで画面に表示し、そのファイルの内容を別のファイルにコピーします.
#include
void main()
{
FILE *fp1, *fp2;
char c;
fp1 = fopen("a.txt", "r");
fp2 = fopen("b.txt", "w");
while (!feof(fp1))
{
c = fgetc(fp1);
putchar(c);
}
rewind(fp1);
while (!feof(fp2))
{
c = fgetc(fp1);
fputc(c, fp2);
}
fclose(fp1);
fclose(fp2);
}
例12.10既存のディスクファイルfile.txt、その内容は以下の通りです.
#include
#include
void main()
{
FILE *fp;
long p;
if ((fp = fopen("file.txt", "a+")) == NULL)
{
printf("
");
exit(1);
}
p = ftell(fp);
printf(" %ld
",p);
fseek(fp, 0, 2);
p = ftell(fp);
printf(" %ld
",p);
fputs("This is a c program!", fp);
p = ftell(fp);
printf(" %ld
", p);
fclose(fp);
}
例12.11ディスク内の1つのファイルの内容を別のファイルにコピーします.
#include
#include
void main()
{
FILE *fp1, *fp2;
char ch;
char in[10];
char out[10];
printf(" : ");
scanf(" :");
if ((fp1 = fopen(in, "r")) == NULL)
{
exit(0);
}
if ((fp2 = fopen(out, "w")) == NULL)
{
printf("
");
exit(0);
}
while (!feof(fp1))
{
ch = fgetc(fp1);
fputc(ch, fp2);
fclose(fp1);
fclose(fp1);
}
}
例12.12既存の文書には、名前、学号、および4科目の成績を含む10名の学生の情報が記録されており、文書からデータを読み出し、4科目の平均成績を計算し、別の文書に書くことが要求されている.
#include
#include
void main()
{
void f();
char s[][10] = { " "," "," "," "," "," " };
f(s);
}
void f(char (*p)[10])
{
FILE *fp;
int score[10][4];
float aver[10];
char xuehao[10][10], name[10][20];
char t[5];
int i, j, k = 0;
float a[10], *p1;
p1 = a;
fp = fopen("stuin.txt","r");
for (i = 0; i < 10; i++)
{
fscanf(fp,"%s",xuehao[i]);
fscanf(fp,"%s",name[i]);
for(j=0;j<4;j++)
fscanf(fp,"%f",score[i][j]);
*(p1 + i) = (score[i][0] + score[i][0] + score[i][2] + score[i][3]) / 4.0;
}
fclose(fp);
fp = fopen("stuout.txt", "w");
for (i = 0; i < 10; i++)
{
fprintf(fp,"%10s",xuehao[i]);
fprintf(fp, "%10s", name[i]);
for (j = 0; i < 4; j++);
fprintf(fp,"%3d",score[i][j]);
fprintf(fp,".1f%f",*(p1+i));
}
fclose(fp);
fp = fopen("stuout.txt", "r");
for (i = 0; i < 10; i++)
{
fscanf(fp,"%s",xuehao[i]);
fscanf(fp,"%s",name[i]);
for (j = 0; j < 4; j++);
fscanf(fp,"%d",score[i][j]);
fscanf(fp, "%f", a[i]);
}
for (i = 0; i < 10; i++)
{
printf("%10s%10s%3d%3d%3d%3d%6.1f
",xuehao[i],name[i],score[i][0],score[i][i],score[i][2],score[i][3],a[i]);
}
fclose(fp);
}
1、f関数は1つのパラメータ2を受け入れず、doubleからfloatに変換するとデータが失われる可能性がある3、fopen 4、fscanf()5、フォーマット文字列%fはタイプfloatのパラメータを必要とするが、可変パラメータ1はタイプint 6、