请问这样读入为什么不行呢?
//变量转化为数字
//存到栈里
//后缀转中缀,用栈模拟
//遇到'&'和'|'用栈顶和次栈顶的运算,遇到'!'直接取反栈顶
#include<bits/stdc++.h>
using namespace std;
char str[1000010];
int n,num,top,idx;
int a[100010];
int stack1[100010];
int lin[100010];//临时用的,最后放栈里算
int main()
{
while(cin>>str&&str[0]!=EOF)
{
if(str[0]=='x')//如果是个变量
{
num=0;//转化为数字存栈里
for(int i=1;i<strlen(str);i++)
{
num*=10;
num+=(str[i]-'0');
}
lin[++idx]=0;
a[num]=idx;//这个数在临时栈对应的位置
}
if(str[0]=='&')
{
lin[++idx]=-1;
continue;
}
if(str[0]=='|')
{
lin[++idx]=-2;
continue;
}
if(str[0]=='!')
{
lin[++idx]=-3;
continue;
}
}
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
lin[a[i]]=x;
}
for(int i=1;i<=idx;i++)
{
cout<<lin[i]<<" ";
}
return 0;
}