- ベストアンサー
scanfについて
こんにちわ。 今Cのプログラムを勉強しているんですが, puts("入力します:"); if (fscanf(stdin,"%s", name) == EOF) { puts("エラーです"); } では,改行のみの場合に,何も返さずにもう一度fscanfが読み込まれますよね。 (fscanfは改行のみの場合はそれ自身の関数が再度呼ばれると思うんですが・・・) これを改行もエラーとして表示するにはどうすればよろしいでしょうか。 ただし,入力文字は2文字以上です。 他の入力関数を用いることになってもいいんですが,わかる方,よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1です たびたびすみません。アスキーコードのミスです。 while(*fgets(str,255,stdin) < 0x21) ; これでアスキーコード0x21以下は無視します。 もし、エラーコードを返したいのであれば if (!(*fgets(str,255,stdin) < 0x21)) { //エラー } こんな感じでしょうか。
その他の回答 (2)
- tamanegi_majin
- ベストアンサー率32% (16/49)
回答No.2
No1です。 追記 while(*fgets(str,255,stdin) < 0x41) ; こんな感じでどうでしょう。
- tamanegi_majin
- ベストアンサー率32% (16/49)
回答No.1
fgets(str,255,stdin); fscanfは改行を空白として無視します。原因はそこでしょうね。 上記fgetsは改行コードも文字列に格納します。 (引数は左から「格納先配列ポインタ」「バイト数」「stdin」) 改行コードが入っている事を忘れずにお使いください。
補足
ただ,これだと,たとえば, puts("入力します:"); if (fgets(name,20, stdin) == NULL) { puts("エラーです"); } とうつと,改行はエラーを返してくれません。 どうしたらよろしいでしょうか。