Написал программу, но есть одна проблема. На некоторых этапах надо записать содержимое стека в файл. Вот код:
#include <stdio.h>
FILE *f1,*fstack;
struct duck{ //сама структура
char el;
duck *next;};
int pust(duck * p)//проверка на пустоту
{
if (p == NULL)
return 1;
else
return 0;
}
duck *add(duck *p, char x)//добавление элемента в стек
{
if (pust(p) == 1)
{
p = new duck;
p->el = x;
p->next = NULL;
return p;
}
else
{
duck *s;//s and p = first elem
s = new duck;
s->el = x;
s->next = p;
return s;
}
}
char inX(FILE *f1)//ввод переменной
{
int c;
fscanf(f1,"%c",&c);
return c;
}
duck *out (duck *p)//взять из стека
{
if(pust(p) == 0)
{
duck *s = p;
p = p->next;
s->next = NULL;
return p;
}
}
int find(duck * p, char x)//найти элемент в стеке
{
int answer;
if (pust(p) == 1)
return 0;
else
{
if (p->el == x)
return 1;
else
{
p = out(p);
answer = find(p,x);
}
}
}
void main()
{
duck *p = NULL;
f1 = fopen("input.txt","r");
char c;
fscanf(f1,"%c",&c);
while(c !='.')
{
p = add(p,c);
/*вот здесь должен быть вывод*/
fscanf(f1,"%c",&c);
}
fclose(f1);
f1 = fopen("char.txt","r");
char x = inX(f1);
int answer = find(p,x);
f1 = fopen("output.txt","w");
fprintf(f1,"%d",answer);
fclose(f1);
}
Вывод стека должен быть реализован на базовых операциях(создание, взять, положить, проверить на пустоту)
У меня есть программа вывода стека на экран, но она выводит только 2 последних элемента
void outputStack(duck *p)
{
while (p != NULL)
{
fprintf(fstack,"%c", p->el);
p = out(p);
}
}
то есть на стек 123, она должна по идее была вывести 1,21,321... а она выводит 1,21,32, для большего количества элементов аналогично поступает, то есть выводит только 2 верхних элемента из стека