アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある本にscanf()の書き方が書いてあってそれを入力してもエラーが表示されてわかりませ。
使用ソフトはMicrosoft Visual c++です。どこが間違っているのか教えてください。
#include <stdio.h>
#include <stdlib.h>

int main (void)
{

int score[10];
int status;
int temp_score;
int score_count;
int i;


/*配列に位に入力*/
score_count = 0;
while(1){
status=scanf("d",&score_count);
if (status == EOF ){
break;
}else if (status != 1){
fprintf(stderr ,"入力エラー\n");
exit(1);
}
if (score_count >= 10 ){
fprintf( stderr,"データ件数が多すぎます\n");
exit(1);
}

score[score_count] =temp_score;
score_count++;
}
}

/*配置の内容を表示する*/
for(i=0 ;i < score_count;i++){
printf("score[%d]..%d\n",i,score[i]);
}

return (0);
}

A 回答 (4件)

先ほどの補足です、status=scanf("d",&score_count); のcore_countでなくてtemp_scoreでは有りませんか?


それと、score_count++; の次に「}」が2つ有りますが1つ要りません。
1つ多いです。
以上です。
    • good
    • 0

timberさんが回答されている方の通り、int score_count; に標準入力からの場合は


"%d"です、それとこのそースプログラムですと、標準入力から整数型変数
score_countに入れて配列の添字に使っており、その後インクリメントされて
いるのはおかしいです、それと一次元配列score[score_count]
に代入しているのがint temp_score;になっていてこの変数にはこのソース内で
代入などされていないし、初期値も無いので代入される値は不定値が一次元配列に
入ります、処理内容がいまいち納得できませんが!

status=scanf("d",&score_count);
       ↑
       %が抜けてます。これでエラーはなくなります。
    • good
    • 0
この回答へのお礼

そこが抜けていたみたいですね(^^;)
今やってみたらできました。どうもありがとうございます。

お礼日時:2002/10/13 00:56

補足です。



MSDNによると
戻り値が 0 の場合は、代入されたフィールドがなかったことを示します。
とのことです。

status=scanf("d",&score_count);
のままだと代入が行われませんので
statusは常に「0」。
したがって、何を入力しても「入力エラー」となります。
    • good
    • 0
この回答へのお礼

できました、scanfの%と&はすぐに忘れてしまうんで・・(これから気をつけないと)質問の回答ありがとうございます。勉強になりました。

お礼日時:2002/10/13 00:59

whileの後


status=scanf("d",&score_count);
じゃなく
status=scanf("%d",&score_count);
だと思いますが。
会社に行かないとVCないんで火曜日にならないと検証はできないんですけど。
    • good
    • 0

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