- ベストアンサー
fgetsの改行について
fgetsで指定したファイル名のファイルを操作するプログラムの条件で、 ファイル名が入力されていない状態でエンターを入力した場合「ファイル名が未入力です」と出力してプログラムを終了させたいのですが、なぜか1行空行を挟んだ後に上記メッセージが出力されてしまいます(下記プログラム)空行を無くすにはどうすれば良いのでしょうか? これはfgetsに"\n"が含まれていることが問題なんでしょうか? if (!strcmp(filename, "\n")) { printf("ファイル名が未入力です。\n"); exit(1); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
要するに今回の話はfgets()とは何も関係なかった、ということですね。 printf()で出力するメッセージの最後に改行があるかないか、という話でした。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
> これはどうしようもないのでしょうか? はい。printf()の書式文字列に'\n'を含んでいる限り、 何が何でもそこで改行します。
- asuncion
- ベストアンサー率33% (2127/6289)
こういったことがしたいのでしょうか? #include <stdio.h> #include <string.h> int main(void) { char fn[80]; printf("ファイル名を入力してください:"); fgets(fn, 80, stdin); if (fn[strlen(fn)-1] == '\n') { fn[strlen(fn)-1] = '\0'; } if (fn[0] != '\0') { printf("ファイル名は'%s'です。\n", fn); } else { printf("ファイル名を入力しませんでしたね。\n"); } return 0; }
- Tacosan
- ベストアンサー率23% (3656/15482)
その「挟んだ空行」は「ファイル名を入力するときに入れたエンターによるもの」ですか? もしそうなら, 普通はそうなりますね.
補足
そうです。ファイル名を入力するときに入れたエンターによるものです。 その挟んだ空行をなくすにはどうすればよいのでしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
例えば char s[10]; と定義してある状態で fgets(s, 10, stdin); と書いて標準入力からの入力を待つとします。そして、 abc<Enter> と入力したとします。すると、s[]の内容は次のようになります。 s[0]:'a' s[1]:'b' s[2]:'c' s[3]:'\n' s[4]:'\0' '\n'を取り除くのであれば、そのためのコードを自分で書く必要があります。
補足
#pragma warning(disable : 4996) #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_NAME 256 #define MAX_BUF 256 int main(void) { FILE *rfp, *wfp; int len; char filename[MAX_NAME]; char buf[MAX_BUF]; printf( "ファイルを書き換えます。ファイル名を入力してください\n" ); fgets(filename, MAX_NAME - 1, stdin); len = strlen(filename); if (!strcmp(filename, "\n")) { printf("ファイル名が未入力です。\n"); return 1; } if ( filename[len - 1] == '\n' ) { filename[len - 1] = '\0'; } if ((rfp = fopen(filename, "r+" )) == NULL) { printf("ファイルが存在しないので新規作成します。\n"); // 読み込みファイルが存在しない場合 if ((wfp = fopen(filename, "w")) == NULL) { printf("ファイルがオープン出来ません。\n"); exit(1); } } printf("ファイル内容を書き換えて下さい。\n"); fgets(buf, MAX_BUF - 1, stdin); fprintf(wfp, "%s", buf); printf("更新完了\n"); fclose(rfp); fclose(wfp); } このようなファイルが存在しなければ、新規作成しファイル内容を書き換え、存在すればその内容を更新するといったプログラムなのですが、 どうやらprintf( "ファイルを書き換えます。ファイル名を入力してください\n" );の\nを削除するとうまく動くのですが、\nをつけたままだと空行が出来てしまいます。 これはどうしようもないのでしょうか?