こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

なぜかわかりませんscanf()の戻り値で迷ってます。

ある本に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);
}

投稿日時 - 2002-10-12 20:38:58

QNo.379489

困ってます

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

先ほどの補足です、status=scanf("d",&score_count); のcore_countでなくてtemp_scoreでは有りませんか?
それと、score_count++; の次に「}」が2つ有りますが1つ要りません。
1つ多いです。
以上です。

投稿日時 - 2002-10-13 00:59:06

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

status=scanf("d",&score_count);
       ↑
       %が抜けてます。これでエラーはなくなります。

投稿日時 - 2002-10-13 00:29:03

お礼

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

投稿日時 - 2002-10-13 00:56:51

ANo.2

補足です。

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

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

投稿日時 - 2002-10-12 21:05:56

お礼

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

投稿日時 - 2002-10-13 00:59:11

ANo.1

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

投稿日時 - 2002-10-12 20:54:25

あなたにオススメの質問