Fly_Shark 2021-04-21 23:21 采纳率: 100%
浏览 45
已采纳

第一次入栈后,第二次没法输入

#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("错误!");

转到“按任意键继续”了,没法第二次入栈了

  • 写回答

6条回答 默认 最新

  • CSDN专家-cpp_learner 2021-04-22 08:34
    关注

    上面两位老师说的没错,fflush(stdin);确实是C语言清空输入缓冲区的函数,但是这个函数却在VS中没有效果,所以不推荐使用它。

    既然不能使用它,那就自己写一个吧:

    char c;    // C/C++情况输入缓冲区,各种编译器都有效
    while ((c = getchar()) != '\n');

    如下图,在该位置加上这段代码即可。另外,下面两个if判断又稍许问题,你自己可以调试看看top的值,对于数组的什么数据。

     

    如果问题解决,那就点个采纳吧! 

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 怎么修改鸿蒙app的UI及功能设计
  • ¥20 双硬盘安装Ubuntu后windows 无法挂载硬盘
  • ¥15 帮我利用jupyter 运行一个正确的代码
  • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
  • ¥15 sqlite加密问题咨询
  • ¥15 appdesigner接收不到udp组播的数据
  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理