アプリ版:「スタンプのみでお礼する」機能のリリースについて

配列データをファイルに読み込んで、ファイルを表示させるプログラムを作りたいです。

以下のプログラムを作ったのですがうまくいきません。

内容としては、初めにファイルがあったら読み込んで、メニューである2を入力したら読み込んだものをそのまま表示、何もなかったら1で入力したものを2で表示させたいです。

このプログラムを実行させると、何も出力されず終了します。
配列に入力したものを格納することは出来ているみたいなので、配列そのものをフォルダに入れて、表示させるにはどうしたら良いでしょうか。
何時間も調べているのですが、どこがおかしいのか分かりません。
わかる方教えて頂きたいです。





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct aaa{
char *a;
char *b;
char *c;
}test;
char x[12];
char y[12];
char z[12];
int main(void){
test s[3];
FILE *file1,*file2,*file3;
int menu;
char ans1,ans2,ans3;
menu=1;
int c;
int h;
h=1;
c=1;
int n=0;
int m=0;
int l=0;
char data1[12],data2[12],data3[12];
file1=fopen("data1.txt","r");
file2=fopen("data2.txt","r");
file3=fopen("data3.txt","r");
/*ファイルの中身があったら読み込む*/
if(file1==NULL){
printf("data1ファイルはありません\n");
}
else{
while(1){
ans1=fscanf(file1,"%s",data1);
if(ans1==EOF){
break;
}
}
fclose(file1);
}
if(file2==NULL){
printf("data2のファイルはありません\n");
}
else{
while(1){
ans2=fscanf(file2,"%s",data2);
if(ans2==EOF){
break;
}
}
fclose(file2);
}
if(file3==NULL){
printf("data3のファイルはありません\n");
}
else{
while(1){
ans3=fscanf(file3,"%s",data3);
if(ans3==EOF){
break;
}
}
fclose(file3);
}
while(c!=2){//2のとき終了
if(menu==1){//メニュー表示
printf("\n[1]データ入力\n");
printf("[2]データ表示して終了\n");
printf(">");
scanf("%d",&c);
}
switch(c){
case 1:
printf("何番目のデータを入力したいですか:");
scanf("%d",&h);
printf("名前は?:");
scanf("%11s%*[^\n]%*c",x);
s[h].a=(char*)malloc(sizeof(char)*(strlen(x)));
strcpy(s[h].a,x);
printf("性別は?:");
scanf("%11s%*[^\n]%*c",y);
s[h].b=(char*)malloc(sizeof(char)*(strlen(y)));
strcpy(s[h].b,y);
printf("年齢は?:");
scanf("%11s%*[^\n]%*c",z);
s[h].c=(char*)malloc(sizeof(char)*(strlen(z)));
strcpy(s[h].c,z);
break;
case 2:
if(file1==NULL||file2==NULL||file3==NULL){
file1=fopen("data1.txt","w");
file2=fopen("data2.txt","w");
file3=fopen("data3.txt","w");
while(1){
ans1=fprintf(file1,"%s",s[n].a);
n++;
if(ans1==EOF){
break;
}
}
fclose(file1);
while(1){
ans2=fprintf(file2,"%s",s[m].b);
m++;
if(ans2==EOF){
break;
}
}

fclose(file2);
while(1){
ans3=fprintf(file3,"%s",s[l].c);
l++;
if(ans3==EOF){
break;
}
}
fclose(file3);
}
file1=fopen("data1.txt","r");
file2=fopen("data2.txt","r");
file3=fopen("data3.txt","r");
while(1){
ans1=fscanf(file1,"%s",data1);
if(ans1==EOF){
break;
}
printf("%s",data1);
}
fclose(file1);
while(1){
ans2=fscanf(file2,"%s",data2);
if(ans1==EOF){
break;
}
printf("%s",data2);
}
fclose(file2);
while(1){
ans3=fscanf(file3,"%s",data3);
if(ans3==EOF){
break;
}
printf("%s",data3);
}
fclose(file3);
printf("\n終了\n");
break;
}
}
}

A 回答 (2件)

プログラムは「思った通り」にではなく「書いた通り」に動作する. そして, 「ある処理をするはずのプログラムなのにしていない」というのは


・そもそもその処理がプログラムに書かれていない
・処理はプログラムに書かれているが制御構造などでそこに到達していない
のどちらかを想像させる.

「ファイルの中身に一切書き込まれない」「ファイルがあっても読み込まない」というのは, 具体的にはそれぞれ「『どこにある情報が』ファイルの中身に一切書き込まれない」「ファイルがあっても『どこに』読み込まない」といっているのでしょうか? そして, それぞれはプログラム中のどこに書いてある? それらが実行されないとしたら, 悪さをしている「制御構造」はどれだと思う?
    • good
    • 0
この回答へのお礼

考えたら、実行できました!
ありがとうございます。

お礼日時:2021/01/11 23:12

「このプログラムを実行させると、何も出力されず終了します」ってどういうこと? 「メニュー」なども全く出力されずに終了するってこと?

    • good
    • 0
この回答へのお礼

すみません。また言葉足らずでした。
メニューは実行されるのですが、ファイルの中身に一切書き込まれない。ファイルがあっても読み込まない、ということです。また、てきとうな値を入力してprintf(“%s“,s[1].a);で表示させるときちんと入力した値が表示されるのでファイルの部分のプログラムが間違っているのだと思っています。

お礼日時:2021/01/11 00:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!