Я изучаю стеки прямо сейчас, и я решил попытаться создать небольшую программу с использованием стека из правил Magic the Gathering, которая также следует порядку LIFO.
Пользователь спросил, хотели бы они
- разыграть заклинание (толчок)
- разрешить заклинание (поп) или
- выйти.
Теперь сложность состоит в том, что я пытаюсь разрешить элементам стека составлять несколько слов каждое.Это вызывает много проблем.
Я могу ввести слово и распечатать его вне цикла while(1)
, но если я помещу его внутрь, все становится бесполезным.Есть идеи?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct {
char item[SIZE];
int top;
} stack;
void init(stack*);
void push(stack*, char[]);
char pop(stack*);
void init(stack* st) {
st->top = -1;
}
void push(stack* st, char* value) {
if (st->top == SIZE - 1) {
printf("STACK OVERFLOW\n");
return;
}
st->top++;
strcpy(st->item[st->top], value);
}
char pop(stack* st) {
if (st->top == -1) {
printf("STACK UNDERFLOW\n");
return -1;
}
char value;
strcpy(value, st->item[st->top]);
st->top--;
return value;
}
int main() {
stack st1, st2;
int choice;
char val[20];
init(&st1);
init(&st2);
printf("You have priority. What would you like to do?\n\n");
printf("1. Cast a spell\n2. Resolve the next spell\n3. Pass priority\n\n");
while (1) {
scanf("%d", &choice);
switch (choice) {
case 1:
printf("What is the spell?\n\n");
scanf("%[^\n]s", val);
printf("%s", val);
push(&st1, val);
case 2:
strcpy(val, pop(&st1));
printf("%s resolves.\n\n", val);
case 3:
exit(0);
}
}
return 0;
}