Make the Undo and Redo Functions void functions but keep them as they are.
Make the Undo and Redo Functions void functions but keep them as they are.
Note: Please modify the given code only, I already posted this question and you gave me a new code!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
char data[100];
struct node* next;
};
struct node* undo_stack = NULL;
struct node* push(struct node* stack, char* data){
struct node* tp = (struct node*)malloc(sizeof(struct node)) ;
strcpy(tp->data,data);
tp->next = stack;
return tp;
}
struct node* pop(struct node* stack){
struct node* tp = stack;
stack = stack->next;
tp->next = NULL;
free(tp);
return stack;
}
// function for add values to stack
struct node* add(struct node* stack, char *str){
struct node* tp = push(stack,str);
return tp;
}
//redo function
struct node* redo(struct node* stack){
if (undo_stack==NULL)
{
return stack;
}
stack = push(stack,undo_stack->data);
undo_stack = pop(undo_stack);
return stack;
}
//undo function
struct node* undo(struct node* stack){
if (stack==NULL)
{
return NULL;
}
undo_stack = push(undo_stack,stack->data);
return pop(stack);
}
//print function
void print(struct node* stack){
if(stack == NULL)
return ;
print(stack->next);
printf("%s\n",stack->data);
}
//function for save in file
void save_command(FILE* filePointer, struct node* stack)
{
if(stack == NULL)
return;
save_command(filePointer, stack->next);
fprintf(filePointer,"%s\n",stack->data);
}
//main function
int main(){
//stacks for undo and redo
struct node *stack1 = NULL;
char input[100];
while(1==1){
printf("MyCommand > ");
gets(input);
if(strcmp("undo",input)==0){ //if input is undo
stack1 = undo(stack1);
printf("result >\n"); print(stack1);
}
else if(strcmp("redo",input)==0){ //if input is redo
stack1 = redo(stack1);
printf("result >\n"); print(stack1);
}
else if(strcmp("print",input)==0){ //if input is print
printf("result >\n");
print(stack1);
}
else if(strcmp("save", input)==0){ //if input is save
FILE* filePointer;
filePointer=fopen("output.txt","w");
save_command(filePointer,stack1);
fclose(filePointer);
}
else if(strcmp("quit",input)==0) //if input is quit
{
FILE* filePointer;
filePointer=fopen("output.txt","w");
save_command(filePointer,stack1);
fclose(filePointer);
printf("result > Good Bye!\n");
exit(0);
}
else{ //if input is any other string add to stack
stack1 = add(stack1,input);
undo_stack = NULL;
}
}
return 0;
}

Step by step
Solved in 2 steps









