スタックのプログラムを作成しているのですが、うまく出来ません。
プログラムの内容を簡単に言うと、配列s[100]と変数topを用いて、ファイルdata.datからgetc()を用いて文字を1文字ずつ読み込み、スタック(s[100])にpush-downするプログラムです。
細かく言うと、作成したプログラムによりファイルからキー(文字)を読み込みスタックにpush-downし、スタックの内容を表示した後に、キーボードからキー(文字)を1文字ずつ入力して、スタックを操作する。
・スタック操作の仕様はキーボードからキー(文字)を1文字ずつ入力する際に、0を入力した場合、プログラム終了。1を入力した場合、1文字pop-upした後、pop-upした文字とスタックの内容を表示。その他の文字を入力した場合、その文字をpush-downした後、スタックの内容を表示。(スタックの内容の表示はprint_stack_mtrx(s,top)を使用する。)
・push-downとpop-upはそれぞれ1つの関数で定義する。
といった感じのプログラムを作成しているのですが、関数push,popの部分をどう書いたら良いのか良く分かりません。一応自分で書いてみたのですが、うまくいきませんでした。どなたか教えていただけないでしょうか?
*ファイルdata.datからはリダイレクションを用いて読み込む。
<作成途中のソースプログラム>
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
char s[MAX];
int top;
void init_stack(){
______top = 0;
_______return;
}
void print_stack_mtrx(char* s, int top){
__int i;
____if(top == 0){
______printf("Stack is empty.\n");
____}
____else{
______printf("--- Contents of Stack ---\n");
______for(i = 0; i < top; i++){
________if(!i){
__________printf("%2c < -- Top (%2d)\n", s[top - i - 1], top);
________}
________else{
__________printf("%2c \n", s[top - i - 1]);
________}
______}
______printf("-------------------------\n");
____}
}
char push(char* s, int top, char j){
___s[top]=j;
___top++;
}
char pop(char* s, int top){
_char c;
___c = s[top];
___top--;
___return c;
}
int main(void)
{
_int c;
_char j;
_char i;
init_stack();
_______while(((c=getc(stdin))!=EOF) && top<MAX){
_______/* ファイルdata.dat からgetc()を用いて1文字ずつ読み込みスタックsに格納.ただしスタックの出入り口を示す top の値も監視すること*/
_________s[top] = c;
_________top++;
_______}
_______print_stack_mtrx( s, top );/* スタック(配列)の内容を表示する関数*/
_______while(1){
_________scanf("%c\n", &j);
_________if(j=='0'){
___________break;
_________}
_________else if(j=='1'){
___/* 1文字pop-upした後, pop-upした文字とスタックの内容を表示 */
___________i = pop(s, top);
___________printf("pop-upした文字: %c\n", i);
___________print_stack_mtrx( s, top );
_________}
_________else{
___/* その他の文字を入力した場合, その文字をpush-downした後,スタックの内容を表示 */
___________push(s, top, j);
___________print_stack_mtrx( s, top );
_________}
_______}
_______return 0;
}