プロが教えるわが家の防犯対策術!

以下のプログラムを作りたいのですが、あってるでしょうか?教えてください。

コンパイルしたときのエラーは、.c:37: error: ‘rear’ undeclared here (not in a function)
.c:37: error: expected ‘;’, ‘,’ or ‘)’ before ‘=’ token


char型の1次元配列q[MAX]を用いてキューを表現する。そのときに、データが入っている要素の先頭の添字をtopという変数で保持し、データが入っている要素の最大の添字より1つ大きな値をrearという変数で保持することによって、キューのデータ構造を表現

キューの内容を出力する関数:void print_queue_ary(char *q, int top, int rear)を作成して、キューの要素についてはプログラム内で初期値として与え、作成した関数の動作確認を行う。

出力例としては、キューの中身が[a,b,c,d]でtopが3,rearが7の場合の結果を示す。

a<---TOP=3
b
c
d
<---REAR=7

#include<stdio.h>
#define MAX 100

void print_queue_ary(char *q,int top,int rear);
void enqueue(char,char*,int*,int*);

int main(void)
{
int num = 0, num2 = 0, i=0;
char x[MAX], y;

printf("------------------------\n");
printf("enqueue動作前\n");
printf("<---TOP=%d\n", num);
printf("<---REAR=%d\n", num2);

printf("enqueueする文字:");
while( (y=getchar()) != EOF )
{
if( y != '\n' && y != '\0' )
{
enqueue(y,x,&num,&num2); //関数の処理
printf("enqueue動作後\n");
print_queue_ary(x,num,num2); //関数の処理
printf("------------------------\n");
printf("enqueue動作前\n");
print_queue_ary(x,num,num2); //関数の処理
printf("enqueueする文字:");
}
}

printf("\n^D\n");
return 0;
}

void print_queue_ary(char*
q[*rear] = c; /

A 回答 (1件)

コードが最後までないのですから、コンパイルエラーになるのは当然かと思いますが…。



>void print_queue_ary(char *q,int top,int rear);
と言うプロトタイプ宣言に対し、
void print_queue_ary(char* q[*rear] = c;
という謎のコードですし。
# ってか仮引数が書かれるべき場所にコードがあるのはいかがなものか?

あと、プロトタイプ宣言通りであればrearはint型の変数であってポインタ変数ではないはずですが?
# sizeof(int) = sizeof(char*)な環境なら無理矢理動く…かも知れませんが。


軽く意訳(?)してみる。
>37: error: ‘rear’ undeclared here (not in a function)
「rearが未定義です。」
>37: error: expected ‘;’, ‘,’ or ‘)’ before ‘=’ token
「’=’の前に';'、','または’)’がありません」
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています