プログラムの構造と誤り

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
girisya

プログラムの構造と誤り

#1

投稿記事 by girisya » 16年前

struct world{
float x,float y,float z
};
struct list
{
struct world w;
struct list *ptr;
};

mai(){
struct listl[4];
unsigned char c=1,mx=4,my=2,mz=1;
for(i=0;i<4;i++,c<<1)
{
l.w.x=float(c&mx);
l.w.y=float(c&my);
l.w.z=float(c&mz);
l.ptr=&l[i+1];
}
}

というプログラムがあるんですが2つ質問したいんです。
①このプログラムで作成されるデータ構造の名称
②プログラム中に、ある誤りが含まれている。どう直せばいいか。
です。

このプログラムが何を意味しているのかもわかりません。
よろしくお願いします!

Dixq (管理人)

Re:プログラムの構造と誤り

#2

投稿記事 by Dixq (管理人) » 16年前

こんにちは。
プログラムコードはタグを使って投稿して下さいね。
詳しくは規約をご覧下さい。

あと、このコードは自分でコンパイルしてみましたか?

mai()

という関数は、main()関数のことですか?
変数がどこで宣言されているかもわかりませんし、
まずはコンパイルの通る形にして見ましょう。

コンパイルの通る形に出来ないなら、コンパイルした時に表示されるエラーメッセージを投稿して下さい。

これは誰かから渡されたコードですか?

non

Re:プログラムの構造と誤り

#3

投稿記事 by non » 16年前

とりあえずエラーはなくしてみました。
ついでに格納したものを表示しました。
#include <stdio.h>
struct world{ 
	float x;
	float y;
	float z; 
}; 
struct list{ 
	struct world w; 
	struct list *ptr; 
}; 
	
int main(void)
{ 
	struct list l[4]; 
	unsigned char c=1,mx=4,my=2,mz=1; 
	int i;
	for(i=0;i<4;i++,c<<=1) { 
		l.w.x=(float)(c & mx); 
		l.w.y=(float)(c & my); 
		l.w.z=(float)(c & mz); 
		l.ptr=&l[i+1]; 
	} 
	for(i=0;i<4;i++)
		printf("%f %f %f %p\n",l.w.x,l.w.y,l.w.z,l.ptr);		
	return 0;
}

で、これは何か・・・?って、それってクイズ?
バイト型のものをfloatに入れて配列なのにリスト構造にしてます。
意味があるとは思えません。

box

Re:プログラムの構造と誤り

#4

投稿記事 by box » 16年前

最初の for ループで、i が 3 のときに l[4] という配列定義外の領域にアクセスしている点が問題かもしれません。
リスト構造を使った下手な実例である、というのは、non さんのご指摘と同じです。

conio

Re:プログラムの構造と誤り

#5

投稿記事 by conio » 16年前

①このプログラムで作成されるデータ構造の名称
⇒"構造体"ではないでしょうか?

②プログラム中に、ある誤りが含まれている。どう直せばいいか。
パッと見ただけでも、つづりの間違い等が見受けられます。
 mai()
listl[4];
など。

C言語歴、C言語の理解がどのくらいなのか分からないので何ともいえませんが、
コンパイルはしてみましたか?
とりあえずコンパイルしてみて、エラーが出たら修正し、エラーがどうしても
取れなかった場合、その時に詳しいエラーの内容などについて質問してみてはどうでしょう?

>>このプログラムが何を意味しているのかもわかりません。
もし、"構造体"、"ポインタ"、"配列"自体が何なのか分からない場合、
まず参考書で学習してからの方がいいと思います。
全く理解して無いのに、答えだけ聞いても意味が無い(全然理解出来ない)かと思います。

girisya

Re:プログラムの構造と誤り

#6

投稿記事 by girisya » 16年前

タグを使わずに投稿してしまいすみませんでした。
回答ありがとうございます。

では1番の答えとしては「構造体」でいいのでしょうか?
コンパイルしてみると、
: 関数 `main' 内:
: `i' が宣言されていません (この関数内で最初に利用)
: (未宣言の各変数については、それが最初に現われたそれぞれの関数
: に対して一度だけ報告されます。)
: 構文解析エラー が "float" の前にあります
: 構文解析エラー が "float" の前にあります
: 構文解析エラー が "float" の前にあります
とでます。

l[4]の部分をどのように変えたらこのエラーはとれるのでしょうか?
何度も質問してしまいすみません。
よろしくお願いします。

non

Re:プログラムの構造と誤り

#7

投稿記事 by non » 16年前

エラーをなくして、載せているのに、なんで?
後、何をどうして欲しいの?
1番の答えはリスト構造かもね。

non

Re:プログラムの構造と誤り

#8

投稿記事 by non » 16年前

>l[4]の部分をどのように変えたらこのエラーはとれるのでしょうか?
この部分を忘れてました。失礼しました。

エラーにはならないと思いますので、無理に直さなくても良いというのが私の考えです。
なぜなら、このプログラムの意味(目的)が理解できないからです。
配列のl[4]がないときに、どこをアドレスは指しているのか調べようというプログラムかもしれないじゃないですか。だから、私のプログラムではアドレスを表示しました。

girisya

Re:プログラムの構造と誤り

#9

投稿記事 by girisya » 16年前

目的としては、このプログラムで作成されるデータ構造l[4]に格納される3次元点を結んだ直線群を図示することです。
エラーをなくしていただいたプログラムを実行した結果ということですね!
具体的にどこをどう直せばいいというのがいまいちわからなかったので…
至らない点がたくさんありすみませんでした。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る