c++两个while循环嵌套问题

while(1){cin>>a;if(a==0)break;k=0;stack[k++]=1.0*a;//处理*/while(1){cin>>ch1>>a>>ch2;if... while(1){
cin>>a;
if(a == 0)
break;
k = 0;
stack[k++] = 1.0 * a;
//处理* /
while(1){
cin>>ch1>>a>>ch2;
if(ch1 == '+'){
stack[k++] = 1.0 * a;
}else if(ch1 == '-'){
stack[k++] = -1.0 * a;
}else if(ch1 == '*'){
stack[k] = stack[k] * a;
}else if(ch1 == '/'){
stack[k] = stack[k] / (double)a;
}
if(ch2!=' ')break;
}
cout<<ch1<<" "<<a<<" "<<ch2<<endl;
//将数组中的数进行相加
result = 0;
for(i = 0;i < k;i++){
result+=stack[i];
}
cout<<result<<endl;
}

为什么在输入1 + 2后不输出结果,而是在输入0后才出结果呢 ?cout也是在外层while循环内的呀。
展开
 我来答
苍紫幽蓝
2015-02-16 · TA获得超过440个赞
知道小有建树答主
回答量:207
采纳率:80%
帮助的人:160万
展开全部
是你的输入乱了的问题,你在最外层while中有一个cin>>a; 此时你需要先输入一个a的值,按照你的结果显示,你输入的是1,此时a=1,stack[0]=1;然后进入第二个循环,cin>>ch1>>a>>ch2; 你输入了 + 2,此时ch1='+',a=2,但是还需要输入ch2,所以输入1+2后不输出结果,因为ch2还未进行输入,直到你输入0之后此时ch2=0;stack[1]=2。
然后进行输出cout<<ch1<<" "<<a<<" "<<ch2<<endl;也就是你结果中的+ 2 0;最后进行stack数组元素相加输出就是1+2,输出3。
追问
我想的是输入1 + 2后回车,ch2!='  ' 也就是2后面没有空格了,结束输入跳出内部while循环,进行输出,这样为什么不可以呢?
追答
你在输入完1 + 2之后,下一个应该输入ch2了,c++的多个输入之间是通过空格或者回车分隔的,所以你在1+2之后的回车是你cin>>ch1>>a>>ch2这句里边a和ch2之间的分隔符,所以还是需要输入ch2,才能进行下边的逻辑。你可以在1+2之后空格再输入一个非空字符例如=号,然后回车
porker2008
2015-02-15 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main() {
int a, i;
int k;
string s;
double stack[1000];
char ch1;
double result;
while (1) {
getline(cin, s);
stringstream in(s);
in >> a;
if (a == 0)
break;
k = 0;
stack[k++] = 1.0 * a;
//处理* /
while (1) {
if (!(in >> ch1 >> a)) break;
if (ch1 == '+') {
stack[k++] = 1.0 * a;
}
else if (ch1 == '-') {
stack[k++] = -1.0 * a;
}
else if (ch1 == '*') {
stack[k - 1] = stack[k - 1] * a;
}
else if (ch1 == '/') {
stack[k - 1] = stack[k - 1] / (double)a;
}
}
//cout << ch1 << " " << a << endl;
//将数组中的数进行相加
result = 0;
for (i = 0; i < k; i++) {
result += stack[i];
}
cout << result << endl;
}
system("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式