• 締切済み

構造体についてです。

身体測定表を作っていて最初に作ったデータを変更して表示したいのですが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); } }

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

>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 ); } 注:インデントに全角空白を用いています。   タブに一括変換して下さい。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

> エラーがでてしまいます。 何をしたときにどんなエラーが出るのか、具体的に書いてください。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

グローバル変数 sp が何のためにあるのかわかりません。補足にどうぞ。 そして、変数 a[0] と a[2] を「入れ替え」たいのですよね。 見通しが悪いので、swap() を適当に実装しましょう。これも補足にどうぞ。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

ポインタを理解してますか? spに実体のアドレスを代入してないのでちゃんとした変数を見てません。 sp=a; の一行を入れましょう。 しかも struct data *sp; と宣言してるのに、 *sp[2].age=19; strcpy(*sp[3].name,"小林三郎"); この使い方は無いですね。上記二行の*は余計です。

関連するQ&A