【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください

#include <stdio.h>

void main (void)
{
inti;
intsum = 0;
intcount[3];
charss[3][30];

for (i = 0; i < 3; i++){

printf("氏名: ");
gets(ss[i]);

printf("得点: ");
scanf("%d" , &count[i]);

}
for (i = 0; i < 3; i++){
sum = sum + count[i];
}
printf("\n\n");
printf("合計 :%d point\n" ,sum);
printf("平均点:%f point\n" ,(double)sum/i);

}
このようなものを作ったのですが、実行すると1人分を入力したあと2人目の入力部分の表示が「氏名:得点:」となってしまい、氏名入力を飛ばし得点入力になります。
どのようにすれば2人目の氏名入力を飛ばさずに進行するのか教えてください。

A 回答 (5件)

入力された文字は一度stdinという場所に溜まると考えてください。


 scanf("%d",&count[i]);
の所で、60と入力してENTERキーを押した時、
stdinには
60↓
という3文字が入っています(↓は改行文字\n)
scanfには改行文字が引き渡されずにstdinに残ります。
そこで、次のgetsがこの改行文字を受け取ってしまいます。
そのようになっているので、2回目のループではss[1]に改行文字が格納され、自動的に次の「得点:」を表示します。

これを簡単に修正するには、scanf("%d",&count[i]);
の下に
   getchar();
を入れてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいたやり方でうまくいきました。ありがとうございます。説明までしていただいて、とても解りやすかったです。ありがとうございました。

お礼日時:2005/10/18 23:15

printfはメモリ上のバッファに文字を貯めて、すぐに表示しないで、printfの表示より、scanfが実行されるためです。


printfの結果をすぐ表示するためにfflush(stdout);を実行してください。

>printf("氏名: ");
>gets(ss[i]);
>printf("得点: ");
>scanf("%d" , &count[i]);


printf("氏名: ");
fflush(stdout);
gets(ss[i]);
printf("得点: ");
fflush(stdout);
scanf("%d" , &count[i]);

に変更。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいた方法でうまくいきました。
いろいろな方法で今回の問題が改善されることがとても勉強になりました。ありがとうございました。

お礼日時:2005/10/18 23:18

なんか最近似たような質問がありました


http://okweb.jp/kotaeru.php3?q=1705652
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かに似ていますね。参考にさせていただきます。
ありがとうございました。

お礼日時:2005/10/18 23:19

こんばんは。


ちょっと試してみました。

10行目を
gets(ss[i]); → scanf("%s",&ss[i]);
に変更すると、うまくいくと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No1の方同様にスペースを入れるとやはりうまく進行しませんでした。自分の説明不足で申し訳ないです。
ありがとうございました。

お礼日時:2005/10/18 23:12

何で氏名入力はgetsを使ってるんですか?


得点入力と同じscanfではダメですか。

print文に改行(\n)がないですね。得点入力のあとに、
printf("%d\n",count[i]);
と入れたらどうですか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分も最初はscanfを使っていたのですが、苗字と名前の間にスペースを入れたかったのでgetsで作成しました。質問内容に書いておくべきでした・・・
教えていただいたものを試したのですが、やはりスペースが入るとうまくいきませんでした。
回答ありがとうございました。

お礼日時:2005/10/18 23:09

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


おすすめ情報