这是为什么呢?求解答!
下面的代码能很好的运行。但是如果将主函数里的while里的输入语句“cin>>s;”改为“scanf("%s",s);” 为什么就不可以呢???(这程序是括号匹配的问题,我用C语言编的。)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
#define maxsize 100
struct Stack
{
char sign[maxsize];
int top;
};
int InitStack(Stack *S)
{
S->top=-1;
return 1;
}
int IsEmpty(Stack *S)
{
if(S->top==-1)return 1;
return 0;
}
int PushStack(Stack *S,char c)
{
S->sign[++S->top]=c;
return 1;
}
int Pop(Stack *S)
{
if(IsEmpty(S))
{
printf("栈空\n");
return 0;
}
S->top--;
return 1;
}
char GetTop(Stack *S)
{
if(IsEmpty(S))
{
printf("栈空\n");
return 0;
}
return S->sign[S->top];
}
int main()
{
char ch;
printf("进行验证请输入Y,退出请输入N: ");
scanf("\n%c",&ch);
while(ch=='Y'|| ch=='y')
{
string s;
printf("输入表达式:\n");
cin>>s;
int length=s.length();
int i;
Stack S;
InitStack(&S);
for(i=0;i<length;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
PushStack(&S,s[i]);
else if(s[i]==')'&&!IsEmpty(&S)&&GetTop(&S)=='(')
Pop(&S);
else if(s[i]==')'&&!IsEmpty(&S)&&GetTop(&S)!='(')
printf("括号匹配次序不正确\n");
else if(s[i]==']'&&!IsEmpty(&S)&&GetTop(&S)=='[')
Pop(&S);
else if(s[i]==']'&&!IsEmpty(&S)&&GetTop(&S)!='[')
printf("括号匹配次序不正确\n");
else if(s[i]=='}'&&!IsEmpty(&S)&&GetTop(&S)=='{')
Pop(&S);
else if(s[i]=='}'&&!IsEmpty(&S)&&GetTop(&S)!='{')
printf("括号匹配次序不正确\n");
else if((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmpty(&S))
{
printf("右括号多于左括号\n");
break;
}
}
if(!IsEmpty(&S))
printf("左括号多于右括号\n");
else if(!((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmpty(&S)))
printf("括号匹配正确\n");
printf("\n继续验证请输入Y,退出请输入N: ");
scanf("\n%c",&ch);
}
system("Pause");
}
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
#define maxsize 100
struct Stack
{
char sign[maxsize];
int top;
};
int InitStack(Stack *S)
{
S->top=-1;
return 1;
}
int IsEmpty(Stack *S)
{
if(S->top==-1)return 1;
return 0;
}
int PushStack(Stack *S,char c)
{
S->sign[++S->top]=c;
return 1;
}
int Pop(Stack *S)
{
if(IsEmpty(S))
{
printf("栈空\n");
return 0;
}
S->top--;
return 1;
}
char GetTop(Stack *S)
{
if(IsEmpty(S))
{
printf("栈空\n");
return 0;
}
return S->sign[S->top];
}
int main()
{
char ch;
printf("进行验证请输入Y,退出请输入N: ");
scanf("\n%c",&ch);
while(ch=='Y'|| ch=='y')
{
string s;
printf("输入表达式:\n");
cin>>s;
int length=s.length();
int i;
Stack S;
InitStack(&S);
for(i=0;i<length;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
PushStack(&S,s[i]);
else if(s[i]==')'&&!IsEmpty(&S)&&GetTop(&S)=='(')
Pop(&S);
else if(s[i]==')'&&!IsEmpty(&S)&&GetTop(&S)!='(')
printf("括号匹配次序不正确\n");
else if(s[i]==']'&&!IsEmpty(&S)&&GetTop(&S)=='[')
Pop(&S);
else if(s[i]==']'&&!IsEmpty(&S)&&GetTop(&S)!='[')
printf("括号匹配次序不正确\n");
else if(s[i]=='}'&&!IsEmpty(&S)&&GetTop(&S)=='{')
Pop(&S);
else if(s[i]=='}'&&!IsEmpty(&S)&&GetTop(&S)!='{')
printf("括号匹配次序不正确\n");
else if((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmpty(&S))
{
printf("右括号多于左括号\n");
break;
}
}
if(!IsEmpty(&S))
printf("左括号多于右括号\n");
else if(!((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmpty(&S)))
printf("括号匹配正确\n");
printf("\n继续验证请输入Y,退出请输入N: ");
scanf("\n%c",&ch);
}
system("Pause");
}
...全文
相关推荐
西门子LOGO! 20 个常见问题解答
### 西门子LOGO! 20个常见问题解答#### 1. 为什么LOGO! 第4个扩展模块DM8的输出点不能使用?**解析:**LOGO! 设备最多支持16个数字量输出。
问答板块添加[已解答、未解答、零解答]按钮插件for Discuz!X1.rar
Discuz!X1问答板块添加[已解答、未解答、零解答]按钮插件插件简介:问答板块添加[已解答、未解答、零解答]按钮安装说明:首先将该板块设定为只允许发布悬赏贴,并设置好分类。模板修改方法详见说明。
西门子LOGO!常见问题解答.rar
常见问题解答.rar”包含了一份PDF文档,旨在解决用户在使用LOGO!过程中可能遇到的问题,提供解决方案和技巧。
C语言竞赛试题及解答合集 下了不后悔!
C语言竞赛试题及解答合集(下了不后悔!包含很多C语言竞赛试题 跟 一些算法)各年度的C语言程序设计竞赛 试题跟答案,经典C语言程序,C语言深度解剖,C语言编程技巧,C语言排序方法大全,C语言递归迭代算
组合数学习题解答
求这样的矩阵的总数。- **解答思路**: - 类似于题目3.16.6的解答思路,首先选定第一行的两个1的位置,然后递归地确定后续每行的1的位置,确保不会与之前任何一行重复。


