質問 |
||
| 質問者: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 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |