• ベストアンサー

なぜかわかりません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); }

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

  • ベストアンサー
  • mneko
  • ベストアンサー率33% (46/139)
回答No.4

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

その他の回答 (3)

  • mneko
  • ベストアンサー率33% (46/139)
回答No.3

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

kimaira
質問者

お礼

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

  • timber
  • ベストアンサー率29% (218/739)
回答No.2

補足です。 MSDNによると 戻り値が 0 の場合は、代入されたフィールドがなかったことを示します。 とのことです。 status=scanf("d",&score_count); のままだと代入が行われませんので statusは常に「0」。 したがって、何を入力しても「入力エラー」となります。

kimaira
質問者

お礼

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

  • timber
  • ベストアンサー率29% (218/739)
回答No.1

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

関連するQ&A

専門家に質問してみよう