#include #include #define MAXNAME 1024 void debug(char *file) { fprintf(stderr, "Trying %s...\n", file); } int main() { char basename[MAXNAME], openfile[MAXNAME]; char txt[] = ".txt", dat[] = ".dat"; char buf[100]; int n; FILE *datafile; fprintf(stderr, "データファイルの名前は?: "); fgets(buf, sizeof buf, stdin); sscanf(buf, "%s", basename); debug(basename); /* 開こうとするファイル名をデバッグ表示 */ if (NULL == (datafile = fopen(basename, "r"))) { /* 入力した名前のファイルが開けなかったら */ /* いったんその名前を openfile にコピーして、 */ strlcpy(openfile, basename, sizeof openfile); /* ".txt" を追加してみる */ strlcat(openfile, txt, sizeof openfile); debug(openfile); if (NULL == (datafile = fopen(openfile, "r"))) { /* それでもだめなら */ strlcpy(openfile, basename, sizeof openfile); /* ".dat" を追加してみる */ strlcat(openfile, dat, sizeof openfile); debug(openfile); if (NULL == (datafile = fopen(openfile, "r"))) { fprintf(stderr, "データファイルを作っといてね\n"); exit(1); } } } for (n=0; fgets(buf, sizeof buf, datafile); n++) printf("%3d: %s", n, buf); fclose(datafile); }