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循环内的呀。 展开
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循环内的呀。 展开
2个回答
展开全部
是你的输入乱了的问题,你在最外层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。
然后进行输出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之后空格再输入一个非空字符例如=号,然后回车
展开全部
#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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询