这是为什么呢?求解答!

xyxk2011 2011-03-30 12:15:21
下面的代码能很好的运行。但是如果将主函数里的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");
}
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl072 2011-03-30
  • 打赏
  • 举报
回复
s 是 C++ 的string 类型,是不能用scanf来输入的。

scanf的 %s 只针对C语言的字符数组类型。
如果非要用scanf来输入, 可以先输入到字符数组中,然后再令 s = 该字符数组:

例如:
char szStr[MAX_LENGTH];
scanf("%s", szStr);

string s = szStr;

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧