#include <iostream>
#include<stdio.h>
using namespace std;
#define MAXN 10
char push(char * stack, int maxn, int* toppt, char x)//进栈函数
{
if (*toppt >= maxn)
return 1;
stack[*toppt] = x;
++(*toppt);
return 0;
}
char pop(char* stack, int* toppt, char * cp)//出栈函数
{
if (*toppt == 0)
return 1;
--(*toppt);
*cp = stack[*toppt];
return 0;
}
void out(char * stack, int toppt)//展示当前栈函数
{
int i;
for (i = toppt - 1; i >= 0; i--)
printf("%c", stack[i]);
printf("\n");
}
void main()
{
char x,s[MAXN];
int top = 0;
printf("请输入括号1:");
scanf_s("%c", &x, sizeof(x));
push(s, MAXN, &top, x);
printf("进栈成功");
out(s, top);
printf("请输入括号2:");
scanf_s("%c", &x, sizeof(x));
push(s, MAXN, &top, x);
if (s[top-1] == '(' && s[top] == ')')
printf("配对成功");
if ((s[top-1] == '(' && s[top] == ')' )|| s[top-1] == ')')
printf("错误!");
}
请问大佬们为什么第一次输数据入栈之后,直接就跳过了
printf("请输入括号2:");
scanf_s("%c", &x, sizeof(x));
push(s, MAXN, &top, x);
if (s[top-1] == '(' && s[top] == ')')
printf("配对成功");
if ((s[top-1] == '(' && s[top] == ')' )|| s[top-1] == ')')
printf("错误!");
转到“按任意键继续”了,没法第二次入栈了
上面两位老师说的没错,fflush(stdin);确实是C语言清空输入缓冲区的函数,但是这个函数却在VS中没有效果,所以不推荐使用它。
既然不能使用它,那就自己写一个吧:
char c; // C/C++情况输入缓冲区,各种编译器都有效
while ((c = getchar()) != '\n');
如下图,在该位置加上这段代码即可。另外,下面两个if判断又稍许问题,你自己可以调试看看top的值,对于数组的什么数据。
如果问题解决,那就点个采纳吧!
因为输入字符后,系统会缓存起来,导致以后不用输入就能取到值了,为了解决这个问题,必须清除缓存,在scanf函数后面调用
fflush(stdin);语句,清除缓存就正常了。
第一次scanf_s后面加fflush(stdin);
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html