Как правильно сравнивать с вершиной стека введённый элемент. Cи
Задание: создать 2 стека символьных. Вводить поочередно элементы в 1ый стек. В случае совпадения вводимого символа с вершиной стека, вводить во второй стек. Некорректно работает case, как правильно сравнивать с вершиной стека введённый элемент:
case 1:
printf("добавить в 1 стек\n");
printf("Введите символ: \n");
char c;
getchar();
scanf_s("%c", &c);
Push(&a, c);
for (int i = 1; i < n1; i++) {
printf("Введите символ: \n");
char c;
getchar();
scanf_s("%c", &c);
if (c != a.x[a.head]) {
Push(&b, c);
}
Push(&a, c);
}
break;
Весь код:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include <locale.h>
typedef struct {
char* x;
int head;
int size;
} Stack;
int Init(Stack* stack, int nSize);
char Pop(Stack* stack);
int Push(Stack* stack, char cElement);
void Clear(Stack* stack);
int GetSize(Stack* stack);
void Free(Stack* stack);
char Top(Stack* p);
int Init(Stack* stack, int nSize) {
stack->x = (char*)malloc(nSize);
if (stack->x == NULL) return -1;
stack->size = nSize;
stack->head = 0;
return nSize;
}
char Pop(Stack* stack) {
if (stack->head == 0) return 0;
return stack->x[--stack->head];
}
int Push(Stack* stack, char cElement) {
if (stack->head == stack->size)
return -1;
stack->x[stack->head++] = cElement;
return 1;
}
void Clear(Stack* stack) {
stack->head = 0;
}
int GetSize(Stack* stack) {
return stack->head;
}
void Free(Stack* stack) {
free(stack->x);
}
int main() {
setlocale(LC_ALL, "ru");
Stack a, b;
int n1, n2;
printf("Введите размер первого стека: ");
scanf_s("%d", &n1);
printf("Введите размер второго стека: ");
scanf_s("%d", &n2);
Init(&a, n1);
Init(&b, n2);
int exit = 0;
while (!exit) {
printf("1. Добавить\n"
"2. Удалить\n"
"3. Показать\n"
"0. Выход\n");
int k, k2,k3;
scanf_s("%d", &k);
switch (k) {
case 1:
printf("добавить в 1 стек\n");
printf("Введите символ: \n");
char c;
getchar();
scanf_s("%c", &c);
Push(&a, c);
for (int i = 1; i < n1; i++) {
printf("Введите символ: \n");
char c;
getchar();
scanf_s("%c", &c);
if (c != a.x[a.head]) {
Push(&b, c);
}
Push(&a, c);
}
break;
case 2:
printf("1. Удалить из 1 стека\n"
"2. Удалить из 2 стека\n");
scanf_s("%d", &k2);
if (k2 == 1)
Pop(&a);
else
Pop(&b);
break;
case 3:
printf("1. Вывести 1 стек\n"
"2. Вывести 2 стек\n");
scanf_s("%d", &k2);
if (k2 == 1)
for (int i = 0; i < a.head; i++)
printf("%c ", a.x[i]);
else
for (int i = 0; i < b.head; i++)
printf("%c ", b.x[i]);
printf("\n");
break;
case 0:
exit = 1;
break;
}
}
return 0;
}