我正在尝试构建一种检测ceratin模式的算法, 但是当进入循环时 代码正在执行两次,即print语句打印两次。 它也会导致算法出现问题。
这里它不仅仅是输入,它直接退出循环。
scanf("%c",&cha);
printf("hello %d 66 \n",not_invalid);
printf("hello %c 67 \n",cha);
这是我的代码:
#include<stdio.h>
struct stack
{
int info[100];
int top;
};
typedef struct stack stack;
void push(stack *s,int ele)
{
s->info[++(s->top)]=ele;
}
int pop(stack *s)
{
return s->info[(s->top)--];
}
int isEmpty(stack s)
{
return s.top==-1;
}
void display(stack s)
{
for(int i=0;i<=s.top;i++) printf("%d \n",s.info[i]);
}
int main()
{
stack mystack;
int not_invalid=1;
mystack.top=-1;
printf("Enter the input string , if its over enter m to exit \n");
char cha;
scanf("%c",&cha);
int i=0;
while(cha!='m' && not_invalid)
{
printf("%d \n",i++);
if(cha!='C' && cha!='D')
{
push(&mystack,cha);
printf("enter the next char : if 43\n");
scanf("%c",&cha);
}
else
{
while(!isEmpty(mystack))
{
printf("enter the next char : else \n");
scanf("%c",&cha);
if(pop(&mystack)!=cha)
{
not_invalid=0;
break;
}
}
if(mystack.top!=-1)
{
printf("OUt from if isEmpty 60 \n");
not_invalid=1;
break;
}
printf("Enter the next char 64 \n");
scanf("%c",&cha);
printf("hello %d 66 \n",not_invalid);
printf("hello %c 67 \n",cha);
if(cha!='D')
{
not_invalid=0;
break;
}else
{
printf("hello %d 66\n ",not_invalid);
printf("Enter the next char 74 \n");
scanf("%c",&cha);
}
}
}
if(not_invalid) printf("Invalid expression \n");
else
{
printf("Valid expression");
}
}
输出:
Enter the input string , if its over enter m to exit
a
0
enter the next char : if 43
1
enter the next char : if 43
C
2
enter the next char : else
enter the next char : else
a
Enter the next char 64
hello 1 66
hello
67
Valid expression
我不确定是什么导致了这个问题,为什么要打印两次并突然结束循环?