スタック・pushとpopをvoid型にしたい
Discussion
スタックについてです。ある問題を模範解答通りに解いた後で少し弄ってみて、そこで行き詰ってしまいました。元の問題では、push関数とpop関数をint型で定義していたので、今までによく見てきたvoid型で書き換えられないかと思い、ひとまず自力でプログラムを考えました。
#include <stdio.h>
#define N 10
typedef struct vehicle{
char stach[N];
int size;
}carEtc;
carEtc Stack;
void init(void){
Stack.size = 0;
}
void push(Stack *stack){
int input;
if (stack->size >= N) {
printf("failed\n");
}
stack->stach[stack->size] = input;
stack->size++;
}
void pop(Stack *stack){
int *output;
if (stack->size <= 0) {
printf("failed\n");
}
*output = stack->stach[stack->size - 1];
stack->size--;
}
int main(void){
char cartype1[] = "自動車";
char cartype2[] = "原動機付自転車";
char cartype3[] = "軽車両";
char cartype4[] = "路面電車";
push(&cartype1);
push(&cartype2);
push(&cartype3);
push(&cartype4);
pop(&cartype1);
pop(&cartype3);
printf("%s\n",Stack.stach);
}
しかし、コンパイル・実行は失敗し、代わりにエラーが出てきました。エラー箇所を示すバッテンマークは、void push(Stack *stack){...
で始まる行とvoid pop(Stack *stack){...
で始まる行の2カ所の隣にそれぞれついていました。
*や->の使い分け等にも手ごたえを感じていて、構造体を使う授業では関数型がvoid型のプログラムを多く見てきたのもあり、その類のプログラムには自信がありました。それゆえに今回、作りたい関数をint型からvoid型に変えてみただけのはずが何故エラーになってしまったのか分からず、困っています。
間違い部分を訂正しつつ、より良いプログラムにしたいです。アドバイスお待ちしています。