• ベストアンサー

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/";この宣言はディレクトリを指しているんですよね? この場合の/はどおいう意味ですか? 教えてください

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

  • ベストアンサー
  • peanus15
  • ベストアンサー率36% (7/19)
回答No.5

カーレントディレクトリ上の DAT というサブディレクトリをします。 C:\user がカーレントディレクトリなら C:\user\dat\walkYYYYMM.txt というファイルが生成 されます。  / はパスセパレータです。 パスセパレータ文字は :¥(バックスラッシュも) / の3文字です。 但し、Cでは¥はエスケープ文字なので¥¥として記述します。

baiorensu
質問者

お礼

パスセパレータ区切りであってますよね? じゃあ/ではない場合は\\でもパスセパレータになるって事ですよね? どうもありがとうございました

その他の回答 (5)

  • peanus15
  • ベストアンサー率36% (7/19)
回答No.6

パスセパレータとは (:)ドライブとディレクトリーの区分け (¥)親ディレクトリーと子ディレクトリーの区分け (¥)子ディレクトリーと孫ディレクトリーの区分け      などです。 ¥と/は、表記・指定上の扱いで、内部では同じものとして扱われます。

baiorensu
質問者

お礼

わかりやすい回答どうもありがとうございました

回答No.4

>この場合の/はどおいう意味ですか? ディレクトリ区切り文字です。

baiorensu
質問者

補足

区切りってディレクトリですよって事をPCに教えてるって事ですか?

回答No.3

ソースコードを見ると、以下の行でディレクトリ名とファイル名の間(%sと%sの間)に"\"や"/"を入れていません。 > sprintf(filename, "%s%s", datadir, datafile); 見たところ、ファイル名も先頭が"\"や"/"で始まる文字列をセットしているわけではないので、ディレクトリ名とファイル名を分けるためにディレクトリ名の最後に"/"を付加しているようです。

baiorensu
質問者

お礼

datadirとdatafileを区切るために/があるのですね? ありがとうございました

回答No.2

WindowsやMS-DOSではディレクトリの区切りは「\」ですが、UNIX系のOSでは「/」もディレクトリの区切りとして使っています。 これはそういう環境のためのプログラムなんでしょう。

baiorensu
質問者

お礼

わかりやすい説明どうもです 私の環境はwindowsなのですが/でもいけます どうもありがとうございました

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

datがディレクトリだと決めているのです。

baiorensu
質問者

お礼

datだけでもディレクトリを開けれるんですね

関連するQ&A