Sakura_Peng @ 2017-12-07 21:55:00
很简单的思路,但是在程序实现上出现了问题。
#include <stdio.h>
int main()
{
int a[1001]={0},top=0;
char ch;
while((ch=getchar()) !='@')
{
if(ch>='0' && ch<='9')
{
a[++top]=ch-'0';
while((ch=getchar())>='0' && ch<='9')
{
//printf("!!!!!!!\n");
a[top]=a[top]*10+ch-'0';
}
}
switch(ch)
{
case '-':a[--top]-=a[top+1];break;
case '+':a[--top]+=a[top+1];break;
case '/':a[--top]/=a[top+1];break;
case '*':a[--top]*=a[top+1];break;
}
}
printf("%d",a[top]);
return 0;
}
所有的问题都是输入的问题,我之前用的是scanf("%c",&ch),并且不是在while括号内,而是在循环体里面写,一直死循环,调了好长时间,都没发现,最后没办法看了一下题解最下面的,发现在括号里写AC了,然后我便改成了while(scanf("%c",&ch)!='@'),但是依旧是死循环,也调了半小时左右也不行,最后被迫跟题解一样,改成了while(ch=getchar()!='@')这时候不死循环了,为什么?? 但是!如果如上写答案一直是0,这时我又调了好长时间,最后无奈还是看了看题解,发现外面括了一个括号while((ch=getchar())!='@')加上之后便样例过了,而且A了。真的不知道怎么回事,求大佬告诉我!
by Altria_Pendragon_ @ 2017-12-08 12:31:45
scanf("%c",ch)的返回值是读取到的数据的个数,肯定要返回int类型。int类型和char类型,肯定不相等,所以scanf("%c",&ch)!='@'一直为true,所以会死循环咯
附上ACcode:
#include <bits/stdc++.h>
using namespace std;
int s[1001],len=0;
void readint(){
int tmp=0;
while (1){
char c;
c=getchar();
if (c=='@') return;
if ((c>='0')&&(c<='9')){tmp*=10; tmp+=c-48; continue;}
if (c=='.'){len++;s[len]=tmp;tmp=0;continue;}
if (c=='+'){s[len-1]+=s[len];len--;s[len+1]=0;continue;}
if (c=='*'){s[len-1]*=s[len];len--;s[len+1]=0;continue;}
if (c=='-'){s[len-1]-=s[len];len--;s[len+1]=0;continue;}
if (c=='/'){s[len-1]/=s[len];len--;s[len+1]=0;continue;}
}
}
int main(){
readint();
cout<<s[1]<<endl;
return 0;
}
恕我吐槽一下,都综应班了还问c++语言问题