←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.3801

後置記法の計算プログラム
投稿者---999(2005/05/26 21:33:47)


OS      WindowsXP
コンパイラ cygwin

後置記法の計算をするプログラムを以下のように作ったのですが、コンパイル時にエラーがでてしまいます。どこが誤っているのかわかりません。教えてください。

STACK.h
void STACKinit(int);
int STACKempty();
void STACKpush(Item);
Item STACKpop();

Item.h
typedef int Item

keisan.c
#include <stdio.h>
#include <string.h>
#include "Item.h"
#include "STACK.h"
main(int argc, char *argv[])
{ char *a = argv[1]; int i, N = strlen(a);
STACKinit(N);
for (i = 0; i < N; i++)
{
if (a[i] == '+')
STACKpush(STACKpop()+STACKpop());
if (a[i] == '*')
STACKpush(STACKpop()*STACKpop());
if ((a[i] >= '0') && (a[i] <= '9'))
STACKpush(0);
while ((a[i] >= '0') && (a[i] <= '9'))
STACKpush(10*STACKpop() + (a[i++]-'0'));
}
printf("%d \n", STACKpop());
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:後置記法の計算プログラム 3802 まきじ 2005/05/26 22:05:33
<子記事> Re:後置記法の計算プログラム 3803 RiSK 2005/05/26 22:13:39


No.3802

Re:後置記法の計算プログラム
投稿者---まきじ(2005/05/26 22:05:33)


>後置記法の計算をするプログラムを以下のように作ったのですが、コンパイル時にエラーがでてしまいます。どこが誤っているのかわかりません。教えてください。

エラーをそのまま提示してください。


この投稿にコメントする

削除パスワード

No.3804

Re:後置記法の計算プログラム
投稿者---999(2005/05/26 22:21:06)


すいません。書き忘れてました。

In file included from keisan.c:4:
STACK.h:1: error: syntax error before "void"
STACK.h:3: warning: parameter names (without types) in function declaration
STACK.h:4: error: parse error before "STACKpop"
STACK.h:4: warning: data definition has no type or strage class
keisan.c:20:4: warning: no newline at end of file

このようにでてきました。


この投稿にコメントする

削除パスワード

No.3806

Re:後置記法の計算プログラム
投稿者---まきじ(2005/05/26 22:47:36)


>STACK.h:1: error: syntax error before "void"

1 行目の void より前に、構文エラーがあるのでしょう。

>STACK.h:3: warning: parameter names (without types) in function declaration
>STACK.h:4: error: parse error before "STACKpop"
>STACK.h:4: warning: data definition has no type or strage class

Item が定義されていないからでしょう。
STACK.h で Item.h を Include しましょう。

>keisan.c:20:4: warning: no newline at end of file

ファイルの最後に改行を入れてみてください。


この投稿にコメントする

削除パスワード

No.3810

Re:後置記法の計算プログラム
投稿者---999(2005/05/26 23:06:02)


>>STACK.h:1: error: syntax error before "void"
>
>1 行目の void より前に、構文エラーがあるのでしょう。

STACK.hファイルはvoidがプログラムの先頭なのですが、どこを直せばよいのですか?


この投稿にコメントする

削除パスワード

No.3812

Re:後置記法の計算プログラム
投稿者---RiSK(2005/05/26 23:14:13)


>>>STACK.h:1: error: syntax error before "void"
>>
>>1 行目の void より前に、構文エラーがあるのでしょう。
>
>STACK.hファイルはvoidがプログラムの先頭なのですが、どこを直せばよいのですか?

私がすでにNo.3803で指摘しました。
プリプロセッサによって #include が展開されているので,
あなたが考えているところと違うところで,コンパイラが転けます。

努力しているのでしょうけど,実際にやったことを書いて貰わないと
こちらもレスが付けづらいです。

この問題はC言語の教科書 K&R でも出てくるような有名な物です。
調べれば情報はいくらでも出てくるでしょう。


この投稿にコメントする

削除パスワード

No.3803

Re:後置記法の計算プログラム
投稿者---RiSK(2005/05/26 22:13:39)


>後置記法の計算をするプログラムを以下のように作ったのですが、コンパイル時にエラーがでてしまいます。どこが誤っているのかわかりません。教えてください。

STACK.h で

>void STACKinit(int);
> int STACKempty();
>void STACKpush(Item);
>Item STACKpop();

が宣言されていますが,定義がありません。
リンクエラーになるでしょう。


Item.h において

>typedef int Item

; がありません。


設計について

STACK.h は Item.h に依存しています。
だったら,STACK.h で Item.h をインクルードすべきだと思いませんか?

そうすれば keisan.c では STACK.h をインクルードするだけで,すむでしょう。


この投稿にコメントする

削除パスワード

No.3805

Re:後置記法の計算プログラム
投稿者---999(2005/05/26 22:41:34)


>STACK.h で
>
>>void STACKinit(int);
>> int STACKempty();
>>void STACKpush(Item);
>>Item STACKpop();
>
>が宣言されていますが,定義がありません。
>リンクエラーになるでしょう。

どのように定義すればよいのでしょうか。教えてください。



この投稿にコメントする

削除パスワード

No.3807

Re:後置記法の計算プログラム
投稿者---まきじ(2005/05/26 22:52:32)


>どのように定義すればよいのでしょうか。教えてください。

定義してないのですか?
STACK.h には
void STACKinit(int);
int STACKempty();
void STACKpush(Item);
Item STACKpop();
としか記述してないのでしょうか?

記述してるものだと思ってました(^^;


この投稿にコメントする

削除パスワード

No.3808

Re:後置記法の計算プログラム
投稿者---RiSK(2005/05/26 23:00:19)


>どのように定義すればよいのでしょうか。教えてください。

はぁ? 実装する楽しみは 999さんが経験して下さい。
それがプログラミングでっせ。

第一,仕様について何も書かれてないし,
999さんしか分からないでしょ?

スタックが分からないなら Google なりで調べてください。


この投稿にコメントする

削除パスワード

No.3809

Re:後置記法の計算プログラム
投稿者---もぐりん(2005/05/26 23:00:33)


>どのように定義すればよいのでしょうか。教えてください。

void STACKinit(int);
int STACKempty();
void STACKpush(Item);
Item STACKpop();

は自分で考えた関数でしょ?
どういったことをするつもりで用意した関数なのかを
はっきりさせてください。
まあ名前から考えられそうですが

void STACKinit(int);--> 変数の初期値の設定などを行う
int STACKempty(); --> 実際に後置記法の計算を行う部分
void STACKpush(Item);-> スタックに積む処理
Item STACKpop(); --> スタックから取り出す処理

ってとこですか。
どこかの資料を参考にしたのなら、参考資料を読めば分かると思いますがどうでしょう。




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity