Re: 構造体への代入がうまくいきません ( No.1 ) |
- 名前:キーチック 日時:2007/05/07 02:27
なんとなくですが,
int set;
の位置が悪いのではないかと思います.
C言語の変数はブロックスコープという,プログラム中のあるブロックでのみ通用する変数定義が可能だったと思いますので,この場合,
int set; で宣言したsetと
for(set=0;set<2000;set++) で用いられているsetが別物で,
さらにfor のループを抜けてからもとの
int set; で宣言したsetを使って
Sample[set].x=set; が実行されているのではないかなと言う気がします.
(つまり,forのループはループしているだけ)
この場合,int set;をWinMainの開始直後ぐらいのところで設定してしまうか,C++であることを考えて
for(int set=0;set<2000;set++)
{
Sample[set].x=set;
}
のような記述に直せばとりあえず何とかなるような気がします.
(ただ,私は変数は局所で定義しないようにする主義なので自信がありませんが…)
|
Re: 構造体への代入がうまくいきません ( No.2 ) |
- 名前:Sura 日時:2007/05/07 03:38
横レス失礼します。
私もBCCを用いているものです。
angelpiasさんのソースを以下のようにソックリ
メイン関数の中に入れたプログラムでは正常に代入されていました。
キーチックさんの仰るスコープ違いによる不具合ではないのでしょうか?
たとえば別のスコープからその構造体へのアクセスは一般にはできません。
おそらくすべて0であったことを考えるとstatic領域のsample_body型の変数を宣言し、
さらに別のスコープ(関数)でまったく同じ名前のsample_body型の変数を宣言し、
それに対して代入しているが、肝心のstatic領域の変数に代入されていない可能性です。
その場合、static領域のスコープにアクセスするには
変数名(ここでは Sample[i].x)の前にスコープ解決演算子::を
追加しなくてはなりません。
ご確認してみてください。
//test code 1:同じスコープの場合
#include <iostream>
using namespace std;
int main(void)
{
typedef struct{
int x;
}sample_body;
sample_body Sample[2000];
int set;
for(set=0;set<2000;set++)
Sample[set].x=set;
//以下出力用のコード
for(int i = 0; i < 2000; i++)
cout << Sample[i].x << endl;
return 0;
}
//test code 2:別スコープの場合(不具合)
#include <iostream>
using namespace std;
typedef struct{
int x;
}sample_body;
sample_body Sample[2000];
int main(void)
{
sample_body Sample[2000];
int set;
for(set=0;set<2000;set++)
Sample[set].x=set;
//以下出力用のコード
for(int i = 0; i < 2000; i++)
cout << Sample[i].x << "," << ::Sample[i].x << endl;
//Sample[i].xはメイン関数内, ::Sample[i].xはstatic領域
return 0;
}
//test code 3:別スコープの場合(修正)
#include <iostream>
using namespace std;
typedef struct{
int x;
}sample_body;
sample_body Sample[2000];
int main(void)
{
sample_body Sample[2000];
int set;
//メイン関数内の変数に対する代入
for(set=0;set<2000;set++)
Sample[set].x=set * 2;
//static領域の変数に対する代入
for(set=0;set<2000;set++)
::Sample[set].x=set;
//以下出力用のコード
for(int i = 0; i < 2000; i++)
cout << Sample[i].x << "," << ::Sample[i].x << endl;
return 0;
}
|
Re: 構造体への代入がうまくいきません ( No.3 ) |
- 名前:星樟八郎 日時:2007/05/07 21:31
あくまで自分の経験ですが、
例えば上のプログラムの場合、
for(set=0;set<2000;set++);
Sample[set].x=set;
と書いたりして(注:forの行の末に";"がある)、
forの文が空ループになってしまったということが、
そんなにしょっちゅうではないですが、たまにあったりしました。
・・・どうでもよかったらすみません。
|