ここから質問投稿すると、最大10000ポイント当たる!!!! >>

こんにちわ。
今Cのプログラムを勉強しているんですが,

puts("入力します:");
if (fscanf(stdin,"%s", name) == EOF)
{
puts("エラーです");
}

では,改行のみの場合に,何も返さずにもう一度fscanfが読み込まれますよね。
(fscanfは改行のみの場合はそれ自身の関数が再度呼ばれると思うんですが・・・)

これを改行もエラーとして表示するにはどうすればよろしいでしょうか。
ただし,入力文字は2文字以上です。

他の入力関数を用いることになってもいいんですが,わかる方,よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No1です


たびたびすみません。アスキーコードのミスです。

while(*fgets(str,255,stdin) < 0x21) ;

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

No1です。


追記

while(*fgets(str,255,stdin) < 0x41) ;

こんな感じでどうでしょう。
    • good
    • 0

fgets(str,255,stdin);



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

この回答への補足

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

補足日時:2003/05/15 17:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング