ここから本文です

このプログラミングなんですがどのように作ればエラーがなくなるでしょうか #in...

sar********さん

2017/1/2017:29:12

このプログラミングなんですがどのように作ればエラーがなくなるでしょうか

#include <stdio.h>
#define NUMBER 3
typedef struct {
int no;
char name[100];
int height;
float

weight;
}student;

void avg(student *x,student *y)
{
int i;
int no=3;
double avg_height=0;
double avg_weight=0;
for(i=0;no-1;i++){
avg_height=avg_height+student[i],height;
avg_weight=avg_weight+student[i],weight;
avg_height/NUMBER;
avg_weight/NUMBER;
};
}

void swap(student *x,student *y)
{
student temp=*x;
*x=*y;
*y=temp;
}

void sort(student data[],int n)
{
int k=n-1;
while (k>=0){
int i,j;
for(i=1,j=-1;i<=k;i++)
if(data[i-1].height>data[i].height){
j=j-1;
swap(&data[i],&data[j]);
}
k=j;}}

int main(void)
{
int i;
student std[]={
{108801,"Taro",170,80.0},
{108802,"Jiro",175,60.5},
{108803,"Miki",180,70.1},
};
sort(std,NUMBER);
puts("No Name height weight");
puts("---------------------------");
for(i=0;i<NUMBER;i++)
printf("%s %s %d %lf\n" ,
std[i].no, std[i].name, std[i].height, std[i].weight);
puts("---------------------------");
printf(" Avg. %d %.1f",avg_height,avg_weight);

return 0;
}

double avg,typedef struct,x student,int i,int no,エラー,エラーメッセージ

閲覧数:
54
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2017/1/2019:39:18

『どのように作ればエラーがなくなるでしょうか』

頑張ってますね。

次のようにするとエラーは無くなりますよ。


(1)11行目

【変更前】void avg(student *x,student *y)
【変更後】typedef struct {double height, weight;} average;void f_avg(const student *x,average* avg)

平均を計算して返す関数という事のようですね。height と weight の2つの値になりますので average 構造体を用意しましょう。それでもって、第2引数としてポインタを受け取るものとします。


(2)15行目、16行目

【変更前】double avg_height=0;
【変更後】avg->height=0;

【変更前】double avg_weight=0;
【変更後】avg->weight=0;

この関数から呼び出し側に提供する情報ですからね。関数内のローカル変数のままではまずいです。(1)で用意したポインタ引数を経由する形にしますよ。


(3)17行目

【変更前】for(i=0;no-1;i++){
【変更後】for(i=0;i < NUMBER;i++){

次の形でも良いですよ。

【変更後】for(i=0;i < no;i++){

いずれにしろ3回分のループになります。


(4)18行目

【変更前】avg_height=avg_height+student[i],height;
【変更後】avg->height=avg->height+x[i].height;

次の形の方が良いかも。

【変更後】avg->height += x[i].height;


(5)19行目

【変更前】avg_weight=avg_weight+student[i],weight;
【変更後】avg->weight=avg->weight+x[i].weight;}

for 文はこれで終わり。なので } を書いています。

先ほど同様、次の形の方が良いかも知れません。

【変更後】avg->weight += x[i].weight;}


(6)20行目、21行目

【変更前】avg_height/NUMBER;
【変更後】avg->height/=NUMBER;

【変更前】avg_weight/NUMBER;
【変更後】avg->weight/=NUMBER;

/ だけだと割った結果を捨てる形になってしまいます。なのでこれは /= にします。


(7)22行目

【変更前】};
【変更後】//

for 文の終わりの位置を変えていますので、ここはコメントにします。

(8)51行目

【変更前】};
【変更後】};average avg;

平均の計算結果を記憶するための変数を用意しますよ。


(9)56行目

【変更前】printf("%s %s %d %lf\n" ,
【変更後】printf("%d %s %d %f\n" ,

先頭の書式が %s になっていますが、これは %d ですね。おしまいの %lf ですが、このままでも最近は大丈夫だったりします。ですが、正しくは %f です。


(10)59行目

【変更前】printf(" Avg. %d %.1f",avg_height,avg_weight);
【変更後】f_avg(std, &avg);printf(" Avg. %f %.1f",avg.height,avg.weight);

平均を計算して出力するようにします。


以上です。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

kei********さん

2017/1/2513:32:39

エラーメッセージが示す行からエラーとなる原因を排除すればエラーがなくなります。

bas********さん

2017/1/2018:04:50

まずは画像はやめましょう。

実際に再度閲覧してみてください。

読めますか?

読めても かなりきつい。

自分で打つか、こぴぺするかしてください。

次に
エラーが出た->質問
ではなく、エラーメッセージを読みましょう。
エラーメッセージにヒントが隠されている場合があります。

(「○行目でエラーが出ています」とかいわれてもわかりません。どのへんでエラーが出ているのかをチェックします。 )

qui********さん

2017/1/2017:58:30

正しく作ればエラーは出ない。間違っているのでしょう。

少なくとも、質問のソースは写真のエラーメッセージとは別のプログラムのものですね。そういう不注意があるようだと、もう何をみていいのかわからなくなるので内容は見ていません。

なんだかaとかmの上に点が見えるけど...変な言語で打っているわけじゃないですよね?>写真

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる