• 締切済み

C言語 構造体

商品番号no、商品名name、仕入れ価格k1、販売価格k2、利益riの5つのメンバからなる構造体syouhinを作成し、noからk2までのデータを入力、riを求め結果として構造体の5つのメンバを出力しなさい。データはデータファイルを作成し読みこむこととし、商品数は数個与えなさい。 という問題なのですがよく分かりません。 プログラムを教えてください。 よろしくお願いします。

みんなの回答

回答No.2

とりあえず値を入れるところまで struct syouhin{ unsigned int no; int k1; int k2; int ri; char name[256]; }; int main(){ struct syouhin s; char * p = &s; *p++ = 1;*p++ = 0;*p++ = 0;*p++ = 0; *p++ = 100;*p++ = 0;*p++ = 0;*p++ = 0; *p++ = 150;*p++ = 0;*p++ = 0;*p++ = 0; *p++ = 50;*p++ = 0;*p++ = 0;*p++ = 0; *p++ = 'n';*p++ = 'a';*p++ = 'm';*p++ = 'e';*p++ = 0; return 0; };

全文を見る
すると、全ての回答が全文表示されます。
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

> という問題なのですがよく分かりません。 どこが? 構造体が判らないということ? 教科書をもう一度読みましょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語での構造体

    C言語の構造体で配列を扱うとき、 struct ○○{  char ○○[○] とすれば出来ますが、同じようにして構造体で二次元配列を扱うことは出来ますか? 一度組んでみたのですが、 #include<stdio.h> struct aaa{ int no; char name[128]; char y_name[128]; char n_name[128]; char s_name[128][128]; }; int main(void){ int i; struct aaa iryo[99]; printf("入力前\n"); /* 構造体配列に scanf()でデータを入力 */ for(i = 0; i < 3; i++) { // printf("input...\n"); scanf("%d", &iryo[i].no); scanf("%s", iryo[i].name); scanf("%s", iryo[i].y_name); scanf("%s", iryo[i].n_name); scanf("%s", iryo[i].s_name); } printf("入力後\n"); printf("出力前\n"); /* 入力データの確認 */ for(i = 0; i < 3; i++) { printf("番号:%02d 内容:%s Y分岐:%s N分岐:%s 他分岐:%s\n", iryo[i].no, iryo[i].name, iryo[i].y_name, iryo[i].n_name, iryo[i].s_name); } printf("出力後\n"); printf("%d",sizeof(struct aaa)); return 0; } としたら、エラーは出ませんが、実行すると何も表示されませんでした。

  • C言語構造体についてです。

    C言語、π=PI 3.14159265で構造体を用いてmensekiを呼び出して 半径と面積を計算して出力するプログラムです。下の空白を埋めてもらえますか? /* 構造体のプログラム */ #include <stdio.h> #include <math.h> #define PI 3.14159265 struct Data { /* 半径rと面積areaをdoubleで宣言 */ }; void menseki(struct ... 構造体のポインタを引数とする ){ /* 面積を計算する際に構造体のアドレスから計算する */ circle->area=PI* .....; } main(){ struct Data example[2]; //構造体配列 int i; /* 半径rを構造体配列を用いて2例入力する */ /* 2例の各々について mensekiを呼び出して 半径と面積を計算して出力する */ } よろしくお願いします。

  • C言語の文字列を含んだ構造体

    下記のサイトに構造体のことが書かれています。 http://www.isl.ne.jp/pcsp/beginC/C_Language_14.html その中の (3)構造体の初期化 の記述で  //構造体の型宣言  struct student{   int no; // 学籍番号   char name[256]; // 氏名   int year; // 学年   char student_class[256]; // クラス  }; と書かれています。 次の(4)構造体のデータ参照では、  //構造体の型宣言  struct OLD{   int no; //番号   char *name; //名前   int s_year; //年   char s_class; //クラス  }; と書かれています。 ここで質問です。 前者の名前は char name[256] ですが、 後者の名前は char *name になっています。 name[256] と *name では何が違うのでしょうか? どういうときに使い分けるのでしょうか?

  • C言語の構造体

    組込み系でマイコンにソフトをプログラミングの仕事をしています。 C言語は初心者です。 http://www9.plala.or.jp/sgwr-t/c/sec15.html のページの冒頭に、 「構造体は幾つかの異なる型のデータをまとめて 1つのデータ型として扱うものなのです。」と書かれています。 1つのデータ型として扱うとどのようなメリットがあるのでしょうか? 例えば、 struct seiseki seito1; のように対象が1つ(seito1)なら int seito1_no; char  seito1_name[20]; double seito1_average; と変数を確保すれば済むのに、 何故、構造体で宣言するのでしょうか? 例えば、 struct seiseki seito2[20]; のように、似たものが複数ある場合は(seito2が20人分なるなら、) 構造体で宣言する意味があるとはなんとなくわかります。 後ページの http://www9.plala.or.jp/sgwr-t/c/sec15-4.html では、関数でのやり取りが書かれています。 関数で引数や返値で扱うときに構造体にしておいた方が良いからでしょうか? 構造体のメリットというのが今一わかりません。 対象が1つでも構造体で書いた方がいろんな意味で良いのでしょうか? 如何せん、初心者なので質問がうまく書けませんがご了承ください。 ※上から目線的な回答はご遠慮願います。

  • c言語 構造体

    初歩の質問ですがお手柔らかに… ポインタもまだ理解しきれていません。 winapiの勉強しながらプログラムを作っています。 windows7,VisualStudio2010使用です。 struct A{ char *name; double i; } *data;//これはグローバル変数にしてあります。 (中略) (以下ダイアログプロシージャ内) TCHAR Buf[128]; GetDlgItemText(hDlg, IDC_XXXXX,Buf,(int)sizeof(Buf) -1); ここから、構造体AのメンバnameにBufの内容をコピーしたいのですが、この後を data->name = Buf ; とすると、nameのポインタがBufと同じものになり、Bufはローカル変数なのでこの関数が終わるとこのアドレスの値はめちゃくちゃになるのでnameを別の関数内では参照できなくなりました。 &(data->name) = 00C09814   &(Buf) = 002EF590 を &(data->name) = 002EF590 &(Buf) = 002EF590 として参照できるようにするのではなく、 アドレス 00C09814に アドレス002EF590の文字をコピーしてdata->nameとBufを別のアドレスで内容が同じものにしたいのです。 *(data->name + i) =*(Buf +i)をループで回してもうまくいかず、 sprintf() や strcpy() も試したのですが、コンパイルはできてもどこか不具合があるらしく、アプリケーションを動かすとこの部分で動作を停止してしまいます。 この場所で data->name = "text" とすると、問題なく文字列を代入できました。 わけのわからないことを言っている部分もありますが、どなたかご教授お願いします。

  • 構造体メンバ及び、strncpy()について

    /* 構造体のメンバを char name[30]; にした時は実行できますが、char *name; としたときはプログラムを実行できません。 コンパイルエラーはともに出ないのですが、strncpy();の使い方が間違っているのか、先に構造体側でメモリサイズを確保しないと、使えないのか? メンバをポインタで持たせた構造体を初期化する関数の作り方を教えてください。 よろしくお願いします。 */ #include <stdio.h> #include <string.h> typedef struct{ char *name; int no; }ST; void set_name(ST *st, char *name, int no); int main(void) { ST st; set_name(&st, "テスト", 1); printf("%s No%d\n", st.name, st.no); return 0; } void set_name(ST *st, char *name, int no) { strncpy(st->name, name, 30); st->no=no; }

  • C言語 構造体配列 list

    プログラミングでこの問題がわからないので教えてください! 下記の構造体タグseisekiを使って,表に示すデータをもつ構造体配列listを作成する. 構造体配列listを利用して,一番点数の高い 者を探し,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90

  • C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して

    C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成しています。 一応目的の動作はするのですが、プログラミングとして正しいか教えて頂ければと 思います。 <test.c> int main() { /* ---------------------------------------- */ /* 構造体のメンバ(NULL保障無し)がNULLか */ /* 比較するサンプル */ /* ---------------------------------------- */ char buf[50]; /* サンプル構造体 */ struct ST_test { int cd; char name[10]; int no; }; struct ST_test st_test; /* 構造体定義 */ memset(&st_test,0x00,sizeof(st_test)); /* 構造体初期化 */ memset(&buf[0],0x00,sizeof(buf)); /* 構造体初期化 */ /* 構造体に値セット */ st_test.cd = 12; memcpy(&st_test.name[0],"aabbccddee",sizeof(st_test.name)); st_test.no = 999; /* NULL判定 */ if(*st_test.name == 0x00) { printf("NULLです\n"); } else { printf("NULLではないです\n"); } return (0); }

  • [C] 構造体メンバーのカンマ区切り出力

    構造体メンバーのカンマ区切り出力をしたいと思っています。 たとえば struct XXX { char name[20]; char address[40]; char tel[12]; ... 100メンバーくらいある } のような構造体があったとします。 printf("%s,%s,%s\n", s_ptr->name, s_ptr->address, s_ptr->tel); などのようにメンバー名(変数名)を参照せずに、構造体のメンバーへのポインタを順次取得しループして出力するなどして、実現することは可能でしょうか?

  • C言語 list 構造体配列

    どうしてもこの問題がわからないので教えてください!  下記の構造体タグ「seiseki」を使って,表に示すデータをもつ構造体配列「list」を作成する.  関数に構造体配列「list」のアドレスを渡す.  関数で構造体ポインタ「*list」を利用して,一番点 数の高い者(1名限定)を調べ,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90

郵便局受け取り場所変更
このQ&Aのポイント
  • 本日届く荷物の受け取り場所変更をしたいです!
  • 午後届くことになっています。
  • 深夜3時をすぎてしまったのでWebでは変えられません。電話もbotになってしまいます。急遽解決策お願いします。
回答を見る