• ベストアンサー

scanfについて

こんにちわ。 今Cのプログラムを勉強しているんですが, puts("入力します:"); if (fscanf(stdin,"%s", name) == EOF) { puts("エラーです"); } では,改行のみの場合に,何も返さずにもう一度fscanfが読み込まれますよね。 (fscanfは改行のみの場合はそれ自身の関数が再度呼ばれると思うんですが・・・) これを改行もエラーとして表示するにはどうすればよろしいでしょうか。 ただし,入力文字は2文字以上です。 他の入力関数を用いることになってもいいんですが,わかる方,よろしくおねがいします。

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

  • ベストアンサー
回答No.3

No1です たびたびすみません。アスキーコードのミスです。 while(*fgets(str,255,stdin) < 0x21) ; これでアスキーコード0x21以下は無視します。 もし、エラーコードを返したいのであれば if (!(*fgets(str,255,stdin) < 0x21)) { //エラー } こんな感じでしょうか。

その他の回答 (2)

回答No.2

No1です。 追記 while(*fgets(str,255,stdin) < 0x41) ; こんな感じでどうでしょう。

回答No.1

fgets(str,255,stdin); fscanfは改行を空白として無視します。原因はそこでしょうね。 上記fgetsは改行コードも文字列に格納します。 (引数は左から「格納先配列ポインタ」「バイト数」「stdin」) 改行コードが入っている事を忘れずにお使いください。

yu393939
質問者

補足

ただ,これだと,たとえば, puts("入力します:"); if (fgets(name,20, stdin) == NULL) { puts("エラーです"); } とうつと,改行はエラーを返してくれません。 どうしたらよろしいでしょうか。

関連するQ&A