電子書籍の厳選無料作品が豊富!

このソースのどこがわるいのかわかりません
エラー時にこのようなエラーメッセージが出ます
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[]) {
}
なぜ、エラーになったか教えてくださいお願いします

A 回答 (2件)

ぱっと見のコードで気になっただけなので全部見てません


コンパイルエラーにはなりませんが
>char datadir[] = "dat/";
char datadir[] = "dat//";
じゃないと動かないと思います(ファイルオープンエラーになると思われます)
ただ / はバックスラッシュのつもりでしょうか?
環境が分かりませんが / がバックスラッシュの代わりになる環境ならいいですが
普通はコードが異なります
    • good
    • 0

エラー箇所と訂正例は以下の通りです。



--------------------------------
52行目:
× sscanf(input_str"%d %d %d",&year,&month,&day);
○ sscanf(input_str", %d %d %d",&year,&month,&day);

65行目:
× printf"コメントは?(30文字以内) >");
○ printf("コメントは?(30文字以内) >");

89行目の最後に改行がない
    • good
    • 0

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