#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
struct nodeStack{
char operator;
struct nodeStack *next;
};
typedef struct nodeStack node;
node *start=NULL;
node *tail=NULL;
int top=-1;
int isEmpty()
{
if(top==-1)
return 1;
}
void push(char c){
node *tempNode,*tail;
tempNode=(node*) malloc(sizeof(node));
if(tempNode==NULL){
printf("Memory Unvailable\n");
return;
}
tempNode->operator=c;
if(start==NULL){
start=tempNode;
tail=start;
tempNode->next=NULL;
top++;
}
else{
tail->next=tempNode;
tempNode->next=NULL;
tail=tail->next;
top++;
}
}
/*
struct node* pop(){
if(top==-1){
printf("stack is empty");
return;
}
else
{
node *temp;
temp=start;
while(temp->next!=tail){
temp->next=NULL;
free(tail);
tail=temp;
}
}
}*/
void displayStack(){
node *i;
for(i=start;i!=tail;i=i->next){
printf("%c -> ",i->operator);
}
}
int main(){
int i;
int flag=1;
char choice='y';
printf("pushing data into the stack......");
while(flag==1){
char ch;
printf("enter a character\n");
scanf(" %c",&ch);
push(ch);
printf("want to push more operator (y\n)");
scanf(" %c",choice);
if(choice=='y')
flag=1;
else
flag=0;
}
displayStack();
return 0;
}
当我尝试运行它时,它给我分段错误。 它只接受一个输入而不进一步,同时它给出了分段错误
当我尝试运行它时,它给我分段错误。 它只接受一个输入而不进一步,同时它给出了分段错误
答案 0 :(得分:0)
看看:
scanf(" %c",choice);
第二个参数应作为地址传递,因为scanf
会修改它。
尝试修改:
scanf("%c", &choice);
我不打算详细解释原因,因为我认为你犯了一个错误,因为在之前的一些行中scanf(" %c",&ch);
你调用了正确的。
注意:我会避免使用scanf
字符串格式的空格。
答案 1 :(得分:0)
这是一个有点修改过的代码!工作代码!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct nodeStack{
char op;
struct nodeStack *next;
}node;
node *start = NULL;
node *tail = NULL;
int top=-1;
int isEmpty()
{
if(top==-1)
return 1;
else return 0;
}
void push(char c){
node *tempNode;
tempNode=(node*) malloc(sizeof(node));
tempNode->op=c;
if(start==NULL){
//start = (node*) malloc(sizeof(node));
start=tempNode;
tail=start;
tempNode->next=NULL;
top++;
}
else{
tail->next=tempNode;
tempNode->next=NULL;
tail=tail->next;
top++;
}
}
/*
struct node* pop(){
if(top==-1){
printf("stack is empty");
return;
}
else
{
node *temp;
temp=start;
while(temp->next!=tail){
temp->next=NULL;
free(tail);
tail=temp;
}
}
}*/
void displayStack(){
node *i;
for(i=start;i!=NULL;i=i->next){
printf("%c -> ",i->op);
}
}
int main(){
int i;
int flag=1;
char choice='y', ch;
printf("pushing data into the stack......");
start=NULL; tail=NULL;
while(flag){
printf("enter a character\n");
scanf(" %c",&ch);
push(ch);
printf("want to push more operator (y/n)");
scanf(" %c",&choice);
if(choice=='y')
flag=1;
else
flag=0;
}
displayStack();
return 0;
}