プロが教える店舗&オフィスのセキュリティ対策術

[緊急]bcc developerについての質問です。
これにどう修正を加えればいいか教えてください。学生数と平均点が0になってしまうんです。
#include<stdio.h>
main()
{float data[100],x,w;
int a,b,e;
a=1;
b=1;
printf("学籍番号=");
while(scanf("%d",&data[a])!=EOF)
{a=a+1;
printf("得点=");
scanf("%d",&point[b]);
b=b+1;
printf("学籍番号=");}
x=point[a];
w=data[b]/point[a];
printf("学生数=%d\n平均点=%f\n",x,w);
}

A 回答 (4件)

> while(scanf("%d",&data[a])!=EOF)


> scanf("%d",&point[b]);

scanf系の変換指定子と、変数の型はちゃんと合せてください。
%dだと、実際に対応する引数がint型へのポインタでなくても、int型のポインタだと解釈して、int型の内部形式でメモリに書き込まれます。
なにがどの型かは、マニュアルを良く読んでください。

>printf("学生数=%d\n平均点=%f\n",x,w);
の 書式も同様。


でも、結果が0になる本質は.....

> w=data[b]/point[a];

aとbの値を追っていきましょう

printf("学籍番号=");
while(scanf("%d",&data[a])!=EOF) /*ループ1回目 a=1,b=1 : 入力→ data[a]=data[1] */
{a=a+1; /* a=2,b=1 */
printf("得点=");
scanf("%d",&point[b]); /* a=1,b=1 : 入力→ point[a]=point[1] */
b=b+1; /* a=2,b=2 */
printf("学籍番号=");}
x=point[a]; /* a=2→ x=point[2] ..,point[2]にはまだ入力されていない */
w=data[b]/point[a]; /* a=2,b=2 → w=data[2]/point[2] ... data[2],point[2]にはまだ入力されていない */
printf("学生数=%d\n平均点=%f\n",x,w);
/* ループ2回目へ */
}

なにがおかしいか、わかりましたか?


他には
・point[]の宣言が見当りませんが?
・配列の添字を1から始めているのは、なんかの意図があってのこと?
・エラーチェックは無しでいいのね? : scanf("%d",&point[b]);が成功したか、 w=data[b]/point[a];が0での割り算にならない保証、data[],point[]の添字の限界を越えない保証等。
    • good
    • 0

よくよく見れば、printfのメッセージ通りの入力なら



学生数=[得点]
平均点=[学籍番号]÷[得点]

になってる。これでは、#3の分直しても、計算方法自体に問題があるからだめだわ。
平均の求めかたも、もう一度よく確認してください。それこそ、数学の教科書でも引っ張り出して。
    • good
    • 0

そのソースでは、pointという変数を定義していないため、


コンパイルできません。

「学生数と平均点が0になってしまう」ということは、
少なくとも実行はできているはずですが、
「コンパイルできない」という現象と矛盾しています。

まずは落ち着いて、コンパイルができているソースを載せてください。
    • good
    • 0

突っ込みどころが多すぎて携帯からだと答えづらいですが、、、



まず、x をやめて e に変更。次に「a = 1;」の上にでも

w = 0;

を追記。さらに「b=b+1;」の上に

w = w + point[b];

を追記。最後に「x=…」「w=…」を

e = a - 1;
w = w / e;

に変更。
これでどうだろう?
    • good
    • 0

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