C言語の穴埋め問題の回答方法

このQ&Aのポイント
  • C言語の穴埋め問題の回答方法を教えてください。
  • C言語の穴埋め問題の回答方法をご教示いただけますか?
  • 穴埋め問題の回答方法について教えてください。
回答を見る
  • ベストアンサー

C言語の穴埋め問題なのですが

???の中身を教えてください #include <stdio.h> #define N 3 //構造体の宣言 typedef struct date{ char *nengou; int year; int month; int day; }DATE; //関数のプロトタイプ宣言 void disp(DATE data); int main(void) { DATE birthday; char buff[80]; ???= buff; printf("年号:"); scanf("%s" , birthday.nengou); printf("年:"); scanf("%d" ,&birthday.year ); printf("月:"); scanf("%d" , &birthday.month); printf("日:"); scanf("%d" ,&birthday.day ); disp(birthday ); } void disp(DATE data) { printf("%s%d年%d月%d日\n" , data.nengou , data.year , data.month , data.day); }

質問者が選んだベストアンサー

  • ベストアンサー
  • tekebon
  • ベストアンサー率62% (36/58)
回答No.2

「???=buff」となっていますので右辺は配列名になっています。 配列名はその配列の先頭アドレスになりますからchar*になります。 左辺は変数でないといけませんから、char*で宣言された変数を 探してみると、構造体のメンバのnengouが該当します。 構造体変数としてbirthdayが宣言されていますから、 「???」の部分は「birthday.nengou」ということが推測されます。

sizu04
質問者

お礼

ありがとうございます理解できました

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8526/19384)
回答No.1

birthday.nengou

関連するQ&A

  • C言語について

    #include <stdio.h> #include <string.h> #include <time.h> typedef struct { int day; double dist; char comment[32]; } diary; void writeData(char datafile[]); void viewData(char datafile[]); char datadir[] = "dat/"; int year, month, day; int main(int argc, char* argv[]) { char datafile[11]; struct tm *date; time_t now; now = time(NULL); date = localtime(&now); year = date->tm_year + 1900; month = date->tm_mon + 1; day = date->tm_mday; sprintf(datafile, "walk%04d%02d", year, month); if ((argc > 1) && (strcmp(argv[1], "-view")==0)) { viewData(datafile); } else { writeData(datafile); } return 0; } void writeData(char datafile[]) { diary today_data; FILE *outfp; //出力ファイルのファイルポインタ char y_n = 'n'; char filename[15]; char input_str[12]; printf("%d/%d/%dの記録をしますか? (y/n) > ", year , month, day); scanf("%c", &y_n); while (getchar() != '\n') { } if(y_n != 'y') { printf("記録する日付は?(例:%d %d %d) > ", year, month, day); year = 0; month = 0; day = 0; gets(input_str); sscanf(input_str, "%d %d %d", &year, &month, &day); if((year > 9999) || (month > 12) || (month < 1) || (day > 31) || (day < 1)) { printf("日付が正しくありません\n"); return; } sprintf(datafile, "walk%04d%02d.txt", year, month); } today_data.day = day; printf("距離は? > "); scanf("%lf", &today_data.dist); while (getchar() != '\n') { } printf("コメントは?(30文字以内) > "); fgets(today_data.comment, 32, stdin); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { while (getchar() != '\n') { } } sprintf(filename, "%s%s", datadir, datafile); if((outfp = fopen(filename, "a+")) == NULL) { printf("ファイルオープンエラー\n"); return; } fprintf(outfp, "%d %.2lf ", today_data.day, today_data.dist); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { today_data.comment[30] = '\n'; today_data.comment[31] = '\0'; } fprintf(outfp, "%s", today_data.comment); fclose(outfp); printf("記録しました"); } void viewData(char datafile[]){ } このソースの char datadir[] = "dat/";この宣言はディレクトリを指しているんですよね? この場合の/はどおいう意味ですか? 教えてください

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語を学習していてつまづいたので、皆さんの意見を聞きたいと思います。 現在、カレンダーを表示するプログラムをつくっています。 Yearとmonthをユーザが入力すると、その年その月のカレンダーが出るという算段です。(画像貼っておきます。ソースコードは下) これはできました。 これをいじって、Yearをユーザから受け取ると、その年の1月から12月までのカレンダーがば~っと表示されるようにしろ、と言われました。 Yearとmonthを受け取って書くやつは友人の助けを得ながらなんとかかけましたが、もう無理です。多分、for文を使うんだと思うんですが……助けてください! #include <stdio.h> int dayofweek(int year, int month); int daysinmonth(int year, int month); int daysinyear(int year); void showcal(int dow, int days); int main(void) { int year, month; int dow; int dim; printf ("Year?: "); scanf ("%d", &year); printf ("Month?: "); scanf ("%d", &month); dow = dayofweek(year, month); dim = daysinmonth(year, month); showcal(dow, dim); return 0; } void showcal (int dow, int days) { int i, j, d; printf ("Su Mo Tu We Th Fr Sa\n"); d = 1; for (i = 0; i < dow; i++) { printf (" "); } for (; i < 7; i++) { printf (" %d ", d); d++; } printf("\n"); for (j = 0; d <= days; j++) { for (i = 0; i < 7 && d <= days; i++) { if (d < 10) printf (" %d ", d); else printf ("%d ", d); d++; } printf("\n"); } } int daysinmonth( int year, int month) { int dim; dim = 31; if (month == 4 || month == 6 || month == 9 || month == 11) dim = 30; if (month == 2) { if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) dim = 29; else dim = 28; } return dim; } int daysinyear( int year) { int diy; if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) diy = 366; else diy = 365; return diy; } int dayofweek (int year, int month) { int dow; int days; int y, m; if (year >= 2000) { days = 0; for ( y = 2000; y < year; y++ ) { days = days + daysinyear(y); } for ( m = 1; m < month; m++ ) { days = days + daysinmonth(year, m); } dow = (6 + days) % 7; } else { days = 0; for ( m = month; m <= 12; m++ ) { days = days + daysinmo

  • C言語

    #include <stdio.h> int main(void) { int month, days; puts("月を入力してください:"); scanf("%d",&month); // if(month == 2) days = 28; if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12); days = 31; else days=30; printf("%d月は%d日あります。\n", month, days); return(0); } // 月と日数の場合わけをしたいのですがうまくいきません。どこをなおせばいいのか誰か教えてください!

  • C言語

    #include <stdio.h> int main(void) { int month, days; puts(\"月を入力してください:\"); scanf(\"%d\",&month); // if(month == 2) days = 28; if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12); days = 31; else days=30; printf(\"%d月は%d日あります。\\n\", month, days); return(0); } // 月と日数の場合わけをしたいのですがうまくいきません。どこをなおせばいいのか誰か教えてください!

  • C言語でのCSVへの出力がうまくいきません…

    風力発電の発電データを1秒ごとに1日分を記録したCSVファイルを読み込み、集計して、集計用の新しいCSVファイルに書き込むプログラムを組もうとしています。以下にソースコードを記載します。 #include<stdio.h> #include<stdlib.h> static char filename[100]; static char wfname[100]; char fname2[256]; void str_copy(char[],char[]); //文字列のコピー void str_cat(char[],char[]); //文字列の連結 struct kaze { _char jikoku[16]; _double fuusoku; _double fuuko; _double denatu; _double denryoku1; _double denryoku2; _double co2; }; struct kaze data[86400]; int main() { _char date2[50]; _char date3[50]; _char month2[10]; _char year2[10]; _char path1[50]="F:\\風力発電\\風車"; _char path2[10]="年"; _char path3[10]="月\\WP"; _char buff[256]; _int month1,month,year,date; _int kensuu,i,j,uruu; _FILE *fpin,*fpout; _printf("集計する年を入力してください。\n"); _scanf("%d",&year); _printf("集計する月を入力してください。\n"); _scanf("%d",&month); _if(month==2){ __printf("閏年ですか?(はい -> 1 いいえ -> 2)"); __scanf("%d",&uruu); _} _if(month==2){ __if(uruu==1){ ___month1=29; __} __else{ ___month1=28; __} _} _else if(month==4 || month==6 || month==9 || month==11){ __month1=30; _} _else{ __month1=31; _} _date=year*100+month; _sprintf(date3,"%d",date); _str_copy(wfname,date3); _str_cat(wfname,".csv"); _sprintf(year2,"%d",year); _sprintf(month2,"%d",month); _sprintf(fname2,"%s%s%s%s%s%s",path1,year2,path2,month2,path3,wfname); _if((fpout=fopen(fname2,"w"))==NULL){ __printf("ファイルが作成できません。 --- %s\n",fname2); __exit(EXIT_FAILURE); _} _fprintf(fpout,"日付,平均風速,平均風向,平均電圧,平均発電電力、発電電力量,CO2削減量\n"); _fprintf(fpout,"年/月/日,m/s,°,V,KW,KWh,kg-c\n"); _printf("集計用ファイルを作成しました。 --- %s\n",fname2); _fclose(fpout); _date=year*10000+month*100; _for(j=1;j<=month1;j++){ __double fuusoku=0,fuuko=0,denatu=0,denryoku1=0,denryoku2=0,co2=0; __date++; __sprintf(date2,"%d",date); __str_copy(filename,date2); __str_cat(filename,".csv"); __sprintf(buff,"%s%s%s%s%s%s",path1,year2,path2,month2,path3,filename); __if((fpin=fopen(buff,"r"))==NULL){ ___printf("ファイルが見つかりません。--- %s\n",buff); ___exit(EXIT_FAILURE); __} __for(kensuu = 0; fscanf(fpin, "%[^,],%lf,%lf,%lf,%lf,%lf,%lf\n", data[kensuu].jikoku, &data[kensuu].fuusoku, &data[kensuu].fuuko, &data[kensuu].denatu, &data[kensuu].denryoku1, &data[kensuu].denryoku2, &data[kensuu].co2) != EOF; kensuu++); __for(i = 0; i < kensuu; i++){ ___fuusoku+=data[i].fuusoku; ___fuuko+=data[i].fuuko; ___denatu+=data[i].denatu; ___denryoku1+=data[i].denryoku1; } __fuusoku/=86400; __fuuko/=86400; __denatu/=86400; __denryoku1/=86400; __denryoku2=data[kensuu-1].denryoku2; __co2=data[kensuu-1].co2; __fclose(fpin); __printf("\n%d年%d月%d日の集計結果\n平均風速:%lf(m/s)\n平均風向:%lf(°)\n __________平均電圧:%lf(V)\n",year,month,j,fuusoku,fuuko,denatu); __printf("平均発電電力:%lf(kW)\n発電電力量:%lf(kWh)\nCO2削減量:%lf(kg-c)\n" ,denryoku1,denryoku2,co2); //ここまでは正常に動作する。 ●if((fpout=fopen(fname2,"a"))==NULL){ ___printf("ファイルに追記できません。--- %s\n",fname2); ___exit(EXIT_FAILURE); __} __fprintf(fpout,"%d/%d/%d,%s,%s,%s,%s,%s,%s\n",year,month,j,fuusoku,fuuko,denatu,denryoku1 ,denryoku2,co2); __printf("以上の結果を記録しました。 --- %s",fname2); __fclose(fpout); } _return EXIT_SUCCESS; } void str_copy(char dst[],char src[]) { _int i; _for(i=0;src[i]!='\0';i++){ __dst[i]=src[i]; _} _dst[i]='\0'; } void str_cat(char dst[],char src[]) { _int i,j; _for(i=0;dst[i]!='\0';i++) ; _for(j=0;src[j]!='\0';j++,i++){ _dst[i]=src[j]; _} _dst[i]='\0'; } 集計用ファイルの作成と項目の書き込み、データファイルの読み込み、集計、ディスプレイへの表示までは問題なく動作するのですが、●印のところで変数fname2がおかしなことになっており、    ファイルに追記できません。--- 23:59:48 と表示されます。どこかでfname2が書き換えられているのだとは思いますが、実際にどこでどうなっているのか、全くわかりません。 どなたか原因がわかる方、もしくは「ここじゃないかな?」など心当たり程度でも構いません。 ご意見をお寄せください!お願いします!

  • C言語 実行エラー 10000日先が表示されない 

    今10000日先後の年、月、日を求めていて下のプログラムを 考えたんですけど、コンパイルは通るんですが結果がうまくいきません↓ どこがおかしいですか? #include<stdio.h> int leapYear(int); int Date(int,int,int,int); int main(void){ int year,i=0,month,date,date2=10000,emp=0; printf("年>>"); scanf("%d",&year); printf("月>>"); scanf("%d",&month); printf("日>>"); scanf("%d",&date); Date(year,month,date,date2);//date2から各月の日数を引いていく printf("year=%d month=%d date=%d date2=%d \n",year,month,date,date2); return 0; } int leapYear(int year){ //うるう年を求める if(year%400==0){ return 1; } else if(year%4==0 && year%100!=0){ return 1; } else return 0; } int Date(int y,int m,int d,int d2){ for(;;y++){ if(d2<0) return y,m,d,d2; for(;m<=12 || d2>=0;m++){ if(leapYear(y)==1){ if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(29-d); else d2-(31-d); } else if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(28-d); else d2-(31-d); } } }

  • C言語プログラムで、ループがうまく回りません…

    前回の質問に回答して頂いた皆さん、ありがとうございました! 読み込んだデータを格納するための構造体配列の個数が足りなかったという、ごく初歩的なミスが原因でした…/// それが解決したばかりで恐縮ですが、新たな問題が発生しました。 風力発電の発電データを1秒ごとに1日分を記録したCSVファイルを読み込み、集計して、集計用の新しいCSVファイルに書き込むプログラムを組もうとしています。以下にソースコードを記載します。 #include<stdio.h> #include<stdlib.h> static char filename[100]; static char wfname[100]; char fname2[256]; void str_copy(char[],char[]);//文字列のコピー void str_cat(char[],char[]);//文字列の連結 struct kaze { _char jikoku[16]; _double fuusoku; _double fuuko; _double denatu; _double denryoku1; _double denryoku2; _double co2; }; struct kaze data[86450]; int main() { _char date2[50]; _char date3[50]; _char month2[10]; _char year2[10]; _char path1[50]="F:\\風力発電\\風車"; _char path2[10]="年"; _char path3[10]="月\\WP"; _char buff[256]; _int month1,month,year,date; _int kensuu,i,j,uruu; _FILE *fpin,*fpout; _printf("集計する年を入力してください。\n"); _scanf("%d",&year); _printf("集計する月を入力してください。\n"); _scanf("%d",&month); _if(month==2){ __printf("閏年ですか?(はい -> 1 いいえ -> 2)"); __scanf("%d",&uruu); _} _if(month==2){ __if(uruu==1){ ___month1=29; __} __else{ ___month1=28; __} _} _else if(month==4 || month==6 || month==9 || month==11){ __month1=30; _} _else{ __month1=31; _} _date=year*100+month; _sprintf(date3,"%d",date); _str_copy(wfname,date3); _str_cat(wfname,".csv"); _sprintf(year2,"%d",year); _sprintf(month2,"%d",month); _sprintf(fname2,"%s%s%s%s%s%s",path1,year2,path2,month2,path3,wfname); _if((fpout=fopen(fname2,"w"))==NULL){ __printf("ファイルが作成できません。 --- %s\n",fname2); __exit(EXIT_FAILURE); _} _fprintf(fpout,"日付,平均風速,平均風向,平均電圧,平均発電電力、発電電力量,CO2削減量\n"); _fprintf(fpout,"年/月/日,m/s,°,V,KW,KWh,kg-c\n"); _printf("集計用ファイルを作成しました。 --- %s\n",fname2); _fclose(fpout); _date=year*10000+month*100; _for(j=1;j<=month1;j++){ //このループ __double fuusoku=0,fuuko=0,denatu=0,denryoku1=0,denryoku2=0,co2=0; __date++; __sprintf(date2,"%d",date); __str_copy(filename,date2); __str_cat(filename,".csv"); __sprintf(buff,"%s%s%s%s%s%s",path1,year2,path2,month2,path3,filename); __if((fpin=fopen(buff,"r"))==NULL){ ___printf("ファイルが見つかりません。--- %s\n",buff); ___exit(EXIT_FAILURE); __} __for(kensuu = 0; fscanf(fpin, "%[^,],%lf,%lf,%lf,%lf,%lf,%lf\n", data[kensuu].jikoku, &data[kensuu].fuusoku, &data[kensuu].fuuko, &data[kensuu].denatu, &data[kensuu].denryoku1, &data[kensuu].denryoku2, &data[kensuu].co2) != EOF; kensuu++); //ここで止まる? __for(i = 12; i < kensuu; i++){ ___fuusoku+=data[i].fuusoku; ___fuuko+=data[i].fuuko; ___denatu+=data[i].denatu; ___denryoku1+=data[i].denryoku1; } __fuusoku/=86400; __fuuko/=86400; __denatu/=86400; __denryoku1/=86400; __denryoku2=data[kensuu-1].denryoku2; __co2=data[kensuu-1].co2; __fclose(fpin); __printf("\n%d年%d月%d日の集計結果\n平均風速:%lf(m/s)\n平均風向:%lf(°)\n __________平均電圧:%lf(V)\n",year,month,j,fuusoku,fuuko,denatu); __printf("平均発電電力:%lf(kW)\n発電電力量:%lf(kWh)\nCO2削減量:%lf(kg-c)\n" ,denryoku1,denryoku2,co2); __if((fpout=fopen(fname2,"a"))==NULL){ ___printf("ファイルに追記できません。--- %s\n",fname2); ___exit(EXIT_FAILURE); __} __fprintf(fpout,"%d/%d/%d,%lf,%lf,%lf,%lf,%lf,%lf\n",year,month,j,fuusoku,fuuko,denatu,denryoku1 ,denryoku2,co2); __printf("以上の結果を記録しました。 --- %s",fname2); __fclose(fpout); } _return EXIT_SUCCESS; } void str_copy(char dst[],char src[]) { _int i; _for(i=0;src[i]!='\0';i++){ __dst[i]=src[i]; _} _dst[i]='\0'; } void str_cat(char dst[],char src[]) { _int i,j; _for(i=0;dst[i]!='\0';i++) ; _for(j=0;src[j]!='\0';j++,i++){ _dst[i]=src[j]; _} _dst[i]='\0'; } >>for(j=1;j<=month1;j++){…} のループについて、1週目は問題なく動くのですが、2週目の >>for(kensuu = 0; fscanf(fpin, "%[^,],%lf,%lf,%lf,%lf,%lf,%lf\n", data[kensuu].jikoku, &data [kensuu].fuusoku,&data[kensuu].fuuko, &data[kensuu].denatu, &data[kensuu].denryoku1, &data[kensuu].denryoku2, &data[kensuu].co2) != EOF; kensuu++); で止まる(というより無限ループになる?)ようです。このfor文の中でprintfを使い調べたところ、どうやらfscanfに問題があるということは分かりました。しかし、なにぶん最近勉強しはじめたばかりで、どこがどう悪いのか、見当もつきません(泣) 次から次へと大変恐縮ですが、心当たり程度でも結構ですので、ご意見をお願いします!

  • C言語で3次元配列を使い一年分のカレンダーを作成

    カレンダーは完成したのですが曜日がズレてしまい綺麗に表示されません。どのように改善すれば良いのでしょうか?よろしくお願いします。 現状です #pragma warning(disable:4996) #include <stdio.h> #include <Windows.h> enum M_LIST { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, N_MONTH }; enum W_LIST { SUN, MON, TUE, WED, THU, FRI, SAT, N_WEEK }; int mday[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //各月の日数 char *weekday[] = { "日","月","火","水","木","金","土" }; //各曜日 /*プロトタイプ宣言*/ int monthday(int year); void Array(int total, char box[N_MONTH][N_WEEK][N_WEEK]); void karenda(char box[N_MONTH][N_WEEK][N_WEEK]); /*メイン*/ void main(void) { int year, total; char box[N_MONTH][N_WEEK][N_WEEK] = { 0 }; //3次元配列を宣言し0を入れる /*画面制御の初期化*/ COORD coord; HANDLE hStdout; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); printf("西暦を入力"); scanf("%d", &year); //年度の入力 total = monthday(year); Array(total, box); karenda(box); } /*求める月の前月までの総日数*/ int monthday(int year) { int total = 0; /*求める年の前年までの総日数を求める*/ total = (((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1); /*うるう年の判定*/ if (((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0) { mday[FEB] = 29; } else { mday[FEB] = 28; } return total % 7; } /*カレンダーの配列*/ void Array(int total, char box[N_MONTH][N_WEEK][N_WEEK]) { int month, row, col, day; col = total; for (month = JAN; month < N_MONTH; month++) { row = 1; day = 1; while (day <= mday[month]) { box[month][row][col] = day; if (col > SAT) { //土曜までいったら次の週 row++; col = SUN; } day++; col++; } } } /*カレンダーの出力*/ void karenda(char box[N_MONTH][N_WEEK][N_WEEK]) { int month, week, day; for (month = JAN; month < N_MONTH; month++) { //月の出力 printf("%3d\n", month + 1); for (week = SUN; week < N_WEEK; week++) { for (day = SUN; day < N_WEEK; day++) { if (week == 0) { //曜日の出力 printf("%s", weekday[day]); } if (box[month][week][day] == 0) { //0なら空白 printf(" "); } else { printf("%3d", box[month][week][day]); } } printf("\n"); } printf("\n"); } } 今はこのような形で表示されます(空白は_で表しています) 日____月____火____水____木____金____土 ________1___2___3___4___5 6___7___8___9__10__11__12 13_14__15__16__17__18__19 20_21__22__23__24__25__26 27_28__29__30__31

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

  • このソースがコンパイルエラーになってしまいます

    このソースのどこがわるいのかわかりません エラー時にこのようなエラーメッセージが出ます In function `writedata': 52: error: syntax error before string constant 65: error: syntax error before string constant 89:2: warning: no newline at end of file ソースはこれです #include <stdio.h> #include <string.h> #include <time.h> typedef struct { int day; double dist; char comment[32]; } diary; void writedata(char datafile[]); void viewdata(char datafile[]); char datadir[] = "dat/"; int year,month,day; int main(int argc,char *argv[]) { char datafile[11]; struct tm *date; time_t now; now = time(NULL); date = localtime(&now); year = date->tm_year + 1900; month = date->tm_mon + 1; day = date->tm_mday; sprintf(datafile,"walk%04d%02d",year,month); if((argc > 1) && (strcmp(argv[1],"-view")==0)) { viewdata(datafile); } else { writedata(datafile); } return 0; } void writedata(char datafile[]) { diary today_data; FILE *outfp; char y_n = 'n'; char filename[15]; char input_str[12]; printf("%d/%d/%dの記録をしますか?(y/n) > ",year,month,day); scanf("%c", &y_n); while(getchar() != '\n') { } if(y_n != 'y') { printf("記録する日付は?(例:%d %d %d) > ",year,month,day); year = 0; month = 0; day = 0; gets(input_str); sscanf(input_str"%d %d %d",&year,&month,&day); if((year > 9999) || (month > 12) || (month < 1) || (day > 31)|| (day < 1)) { printf("日付が正しくありません\n"); return; } sprintf(datafile,"walk%04d%02d",year,month); } today_data.day = day; printf("距離は? >"); scanf("%lf", &today_data.dist); while(getchar() != '\n') { } printf"コメントは?(30文字以内) >"); fgets(today_data.comment, 32, stdin); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { while (getchar() != '\n') { } } sprintf(filename, "%s%s",datadir,datafile); if((outfp = fopen(filename,"a+")) == NULL) { printf("ファイルオープンエラー\n"); return; } fprintf(outfp , "%d %.2lf", today_data.day,today_data.dist); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { today_data.comment[30] = '\n'; today_data.comment[31] = '\0'; } fprintf(outfp,"%s",today_data.comment); fclose(outfp); printf("記録しました"); } void viewdata(char datafile[]) { } なぜ、エラーになったか教えてくださいお願いします