質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

1回答

2825閲覧

線形リストを用いたスタックのコンパイルエラーを解決したいです。

awellbottom

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2016/04/22 02:07

###前提・実現したいこと
演算子、および括弧(左括弧「(」と右括弧「)」) のトークンで構成された中置記法の算術式を読み込み、 スタックを用いて逆ポーランド記法の式を出力する Cのプログラムを作成する。

エラーの理由だけでも教えていただければ、幸いです。

###発生している問題・エラーメッセージ

エラーメッセージ
gcc revp.c
revp.c: In function ‘main’:
revp.c:147: error: expected expression before ‘node_type’

###該当のソースコード
c言語

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define SUCCESS 1 /* 成功 /
#define FAILURE 0 /
失敗 */

typedef char data_type; /*char型をdata_type型に置き換える */

typedef struct node_tag {
data_type data;
struct node_tag next; / 後続ノードへのポインタ /
} node_type; /
ノードの型 */

const node_type head; / スタックの先頭へのポインタ (変数宣言)*/

void initialize(node_type *pp) / スタックの初期化 */
{
pp = NULL; / スタックは空(先頭ノードなし) */
}

/* ノードを後ろに付け加える*/

node_type* new_node(data_type data, node_type** head) {
node_type* n = malloc(sizeof(data_type));
node_type* p;
n->data = data;
n->next = NULL;
if (*head == NULL) {
*head = n;
return n;
}
p = *head;
while(1) {
if (p->next == NULL) {
p->next = n;
break;
}
p = p->next;
}
return n;
}

int is_empty(node_type p) { / 空スタックのとき真、 そうでないならば偽を返す /
if (p == NULL) return TRUE; /
空スタックのとき /
else return FALSE; /
空スタックでないとき */
}

data_type top(node_type p)
{
if (p == NULL) /
空スタックのとき,ナル文字を返す */
return ('0');

else /* 空スタックでないとき スタックの先頭のデータを返す */
return p->data;
}

int pop(node_type **pp)
{
node_type *temp;
if (*pp != NULL) {
temp = (*pp)->next;
free(pp); / メモリの解放 */
*pp = temp;
return SUCCESS;
}
else return FAILURE;
}

int push(node_type **pp, data_type x)
{
node_type *temp;
temp = new_node(x, pp);
if (temp == NULL) return FAILURE;
*pp = temp;
return SUCCESS;
}

int priority(data_type s){

if(s=('A' || 'B' || 'C' || 'D' || 'E' || 'F' ||'G'))
return 5;
if(s='=')
return 0;
if(s='(')
return 4;
if(s=')')
return 1;
if(s='+'||'-')
return 2;
if (s='*'||'/')
return 3;

}

int main(void){
int n,i;
data_type s[50];
printf("中置記法で入力する文字列の文字個数を指定してください:");
scanf("%d",&n);
printf("中置記法の順に代入文の文字列を一文字ずつ入力してください:");
scanf("%c",&s[i]);
for(i=0;i<n;i++){
scanf("%c",&s[i]);
}

for(i=0;i<n;i++){
printf("s[%d]:%c\n",i,s[i]);
}

void initialize(node_type head);
for(i=0;i<n;i++){
node_type
new_node(data_type s[i], node_type
* head);

}

return 0;
}

/*
実行結果
gcc revp.c
revp.c: In function ‘main’:
revp.c:147: error: expected expression before ‘node_type’

*/
###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ここですかね?

void initialize(node_type head);

initialize(&head);

投稿2016/04/22 02:15

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

awellbottom

2016/04/22 02:54

なるほど。mainの最後の方の部分を下のように変更したらコンパイル通りました。 ありがとうございます initialize(&head); for(i=0;i<n;i++){ new_node( s[i], &head);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問