• ベストアンサー

ループを使用して変数に格納したい

madmanの回答

  • ベストアンサー
  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

main() { int i; DEF def; /*defの構造体にデータの代入*/ memset(vvv, \0, BUFSIZ); for(i=0; i<def.d; i++) { sprintf(&www[strlen(www)], "%d,%d,%d,", def.e[i].a, def.e[i].b, def.e[i].c); } /* 最後のカンマを消す */ www[strlen(www)-1] = \0; } これでどうでしょう? 本当なら、もっとエラー処理が必要ですが、とりあえず代入部だけ。 検証してないので、バグるかも。。。。

関連するQ&A

  • 基本的な領域確保の仕方について

    下記のような構造体が宣言されている場合、 A.c.e ←を配列扱いにし、 A.c.e[0].g.h ←を配列扱いにし、 A.c.e[0].g.h[0].iにデータを設定するには、 どのように領域を確保すれば良いのでしょうか? eee型はポインタ宣言のみされていて配列宣言されて いません。(Max10配列) typedef struct { int len; char *i; } hhh; typedef struct { int number; hhh *h; } ggg; typedef struct { fff f; ggg g; } eee; typedef struct { int number; eee *e; } ccc; typedef union { aaa a; bbb b; ccc c; ddd d; } A;

  • 構造体のメンバをfor文で回したい

    次のようなソースで typedef struct test{ int a; int b; int c; }TEST; TEST xx; xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; printf("%d %d %d\n",xx.a,xx.b,xx.c); のようなことをしたいんですが、 xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; の処理の部分をfor文で回せるようにしたいです。 構造体の宣言のところで配列をつかって struct test{ int abc[3]; } とすれば簡単にいくのは分かるんですが、a,b,cそれぞれに分かりやすい名前をつけたいので、配列で確保したくないです。 何かいい方法はないでしょうか? 実際計算に使うんですが、メンバはすべてdouble型で30個程度になると思います。

  • static変数のループ内での処理

    以下のc++ソース内で、static int b = 100;という式ですが、 1回目に、ここの処理を通ったときに静的変数が作成されると思います。 2回目のループのときに、ここでまたb=100と初期化されています。 ですが、ループを重ねるごとに、カウントが1増えていきます。 staticなので、これは期待通りの動作だとは思うのですが、なぜそうなるのかがわかりません。 コンパイラなどが、staticが頭に付いたものは、2度目のループ以降はこの行を無視するように しているのでしょうか? もしそうなら、他に暗黙のルール?のようなことが他にもあるのでしょうか? 考えるとさらにc++がわからなくなってきました。 #include <windows.h> #include <iostream> using namespace std; void test(){ int a = 100; cout << a << " " << &a << endl; static int b = 100; cout << b << " " << &b << endl; b++; int * abc = new int [10]; abc[0] = 9999; cout << abc <<" "<< &abc << " " << abc[0] << endl; delete [] abc; } int main(){ while (1){ Sleep(2000); test(); } } 教えてください。 よろしくお願いいたします。

  • グローバル変数について

    ヘッダに宣言した構造体にあるモジュールでテデータを格納し、 各々のモジュールでそのデータを参照したいのですが、 以下の方法で可能でしょうか? ##CMN.h### typedef struct { char AAA[5]; char BBB[5]; }stCmn; typedef stCmn Cmn_inf; ###A.c### memcpy(Cmn_inf.AAA,"TEST",4); ###B.c### char A[5]; memcpy(A,CMN_inf.AAA,4); ※ A.c B.cに #include "CMN.h"を記述

  • 入れ子の構造体について

    例えば、入れ子の構造体を1つ使いたい場合、 struct bbb{ int b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; と書くと、「dt.a.b = 10」とやれば、値等を設定できると思いますが、 入れ子の構造体を2つ使いたい場合も、同じように書けるのでしょうか? struct ccc{ int c; }; struct bbb{ struct ccc b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; dt.a.b.c = 10; と書けるのでしょうか?こんがらがってしまって、どう書いていいのか・・。 2つでも出来るのであれば、コードの書き方を教えて頂けませんか?

  • 変数表示について

    #! /usr/bin/perl $a='$b$c'; $b='abc'; $c='-def'; print "$a\n"; このようなプログラムで 結果が abc-def という結果にしたいと思い上記のようなプログラムを 作りましたが 結果として表示されたのは $b$c というものでした。 「abc-def」という結果を表示するようにするのは 無理でしょうか? やはり正規表現で文字列を置換してやる必要があるのでしょうか?

    • ベストアンサー
    • Perl
  • データの比較の仕方について

    --宣言-- typedef struct { int len;/* ptrの長さ */ unsigned char *ptr; } aaa; char abc[128]; --宣言end---- HIKAKU(aaa *d1,char *d2) { d1,d2にはそれぞれデータが入力されてくる。 d2はabcのポインタ。 } d1,d2の実体を比較し一致するか否か判定したいのですが、 何分初心者なもので・・・ アドバイス頂けないでしょうか? 宜しくお願い致します。

  • C#で構造体の配列を持った構造体を使いたいのですが

    C#で構造体の配列を持った構造体を使いたいのですが Cならば struct xyz { struct abc _abc[32]; int index; }; struct abc { int a; int b; int c; }; struct xyz _xyz[8]; xyz[0]._abc[3].b = 1; のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません うまくやる方法をどなたかご存知ないでしょうか Visual Studio 2005行った場合 コンパイルで 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します となり fixed をつけると 固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double となってしまいます

  • リトルエンディアン→ビッグエンディアン

    (1)リトルエンディアン typedef struct recvData{  int a;  unsigned char b[16]; unsigned char c[8]; unsigned int d[4]; } recvData_t; recvData_t rData; (2)ビッグエンディアン typedef struct sendData{  int a;  unsigned int b[4]; unsigned int c[2]; unsigned int d[4]; } sendData_t; sendData_t sData; 上記のようなリトルエンディアンの構造体の各メンバのデータを、ビッグエンディアンの構造体の各メンバのデータにそれぞれ格納するには どうしたらよいでしょうか?

  • C++ operatorの使用について

    C++初心者で、現在オペレーターの使用方法について勉強しています。 下記プログラムの「 x = x + z;」箇所の処理について、理解できず行き詰っています。 初期化した際のx, y, zそれぞれの値が x = Help y = !e z = M となったところまでは、理解できています。 その後、x = x + zの処理に入る際、 1.abc operator+(abc) 2.void operator=(abc) の順でオペレーターの処理を行うと思います。 その際、1.はzを使用して処理をするところまでは分かるのですが、 return value: HelpM\n(\:バックスラッシュ)がx, y, zのどこに入るのか、 その後どのオブジェクトを持って2.の処理に入るのかどうか 理解できておりません。 初心者のため、文章がわかりづらい点等あるかと思いますが、 アドバイス頂けたら幸いです。 宜しくお願いいたします。 ========================================================================== #include <cstdio> #include <cstring> class abc { char def[21]; public: abc(void) { strcpy(def, "Help"); } abc(const char s[ ]) { strcpy(def, s); } abc(char c) { def[0] = c; def[1] = '\0'; } void operator=(abc); // redefines = between abc's!!! abc operator+(abc); void out( ) { printf("%s\n", def); } }; void abc::operator=(abc x) { int i, n = strlen(x.def); for(i = 0; i < n; i++) def[i] = x.def[n - (i + 1)]; def[n] = '\0'; } abc abc::operator+(abc a) { int i = 0; abc c; strcpy(c.def, def); while(c.def[i] != '\0') i++; for(int j = 0; a.def[j] != '\0'; j++) { c.def[i] = a.def[j]; i++; } c.def[i] = '\0'; return c; } int main( ) { abc x, y("!e"), z('M'); x = x + z; x.out( ); y = y + x; y.out( ); return 0; }