ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:noname#58788 構造体についてです。
困り度:
  • すぐに回答を!
身体測定表を作っていて最初に作ったデータを変更して表示したいのですがNo1の168cm→162cm
No2の74kg→74.5kg 
No3の20歳→19歳
No4の田中三郎→小林三郎
(No3と4は構造体ポインタを使ってデータを変更)
全データを表示させてその後No1と3の名前〜体重を丸ごと入れ替えて全データを表示させたいのですがエラーがでてしまいます。
分かる人がいましたらどこを直したらいいか教えて下さい。

#include <stdio.h>
#include <string.h>

struct data{
int no;
char name[21];
int age;
int height;
float weight;
};
struct data *sp;



void main(){
int i;
struct data a[4]={
{1,"鈴木太郎",23,168,60},
{2,"山本次郎",17,180,74},
{3,"山田花子",20,156,53},
{4,"田中三郎",35,172,68},
};

struct data b;
for(i=0;i<4;i++){
printf("番号 :%d\n",a[i].no);
printf("名前 :%s\n",a[i].name);
printf("年齢 :%d歳\n",a[i].age);
printf("身長 :%dcm\n",a[i].height);
printf("体重 :%4.1fkg\n\n",a[i]. weight);
}

a[0].height=162;
a[1].weight=74.5;
*sp[2].age=19;
strcpy(*sp[3].name,"小林三郎");


for(i=0;i<=4;i++){
b=a[0];
a[0]=a[2];
a[2]=b;
a[0].no=1;
a[2].no=3;
}
for(i=0;i<=4;i++){
printf("番号 :%d\n",a[i].no);
printf("名前 :%s\n",a[i].name);
printf("年齢 :%d歳\n",a[i].age);
printf("身長 :%dcm\n",a[i].height);
printf("体重 :%4.1fkg\n\n",a[i].weight);
}
}
質問投稿日時:08/04/30 21:50
質問番号:3988395
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

 

回答者:yama5140 >No1と3の名前〜体重を丸ごと入れ替え

にしぼって、

・ポインタを「使う」ことが前提。
・入れ替えさえできれば(◆)。

★↑どちらでしょう?
-------------------------------------------------
◆の回答です。

#include <stdio.h>

typedef struct{
 int iNo, iAge, iHeight; // 順番変えました
 char cName[16];
 float dWeight;
}KOJIN;

void KouzoutaiOut( KOJIN a[], int iii )
{
 printf( "番号:%d,", a[iii].iNo );
 printf( "名前:%s,", a[iii].cName );
 printf( "年齢:%d歳,", a[iii].iAge );
 printf( "身長:%dcm,", a[iii].iHeight );
 printf( "体重:%4.1fkg", a[iii].dWeight );

 printf( "\n" );
}
void main()
{
 int i;
 KOJIN sp, a[4] = {
  { 1, 23, 168, "鈴木太郎", 60.0 },
  { 2, 17, 180, "山本次郎", 74.0 },
  { 3, 20, 156, "山田花子", 53.0 },
  { 4, 35, 172, "田中三郎", 68.0 } };

 for( i = 0; i < 4; i++ ) KouzoutaiOut( a, i );

 printf( "\n" );

 sp = a[0]; a[0] = a[2]; a[2] = sp; // 順不同なので1行に

 for( i = 0; i < 4; i++ ) KouzoutaiOut( a, i );
}
注:インデントに全角空白を用いています。
  タブに一括変換して下さい。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/01 17:18
回答番号:No.4
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:asuncion > エラーがでてしまいます。

何をしたときにどんなエラーが出るのか、具体的に書いてください。
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:08/05/01 00:04
回答番号:No.3
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:koko_u_ グローバル変数 sp が何のためにあるのかわかりません。補足にどうぞ。

そして、変数 a[0] と a[2] を「入れ替え」たいのですよね。
見通しが悪いので、swap() を適当に実装しましょう。これも補足にどうぞ。
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:08/04/30 22:29
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:phoenix343 ポインタを理解してますか?
spに実体のアドレスを代入してないのでちゃんとした変数を見てません。
sp=a;
の一行を入れましょう。
しかも
struct data *sp;
と宣言してるのに、
*sp[2].age=19;
strcpy(*sp[3].name,"小林三郎");
この使い方は無いですね。上記二行の*は余計です。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/30 22:16
回答番号:No.1
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示