这是为什么呢?求解答!
下面的代码能很好的运行。但是如果将主函数里的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");
}