user-0 提问: 这程序的错误怎么改？

回复:
user: user-1
content: 引用 4 楼 weixin_46673152 的回复:现在好了，请问一下最后的if后面还有一个else，只要不满足条件则使Q2等于Q，重新计算，应该怎么设置循环啊 循环只是用Q2代替Q重算一遍，不需要重新输入的吧？那就 scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p,&hf,&l,&d,&v,&a,&b,&Q); while(1) { //在上面那条语句的后面加上while循环  然后在最后一个if if (H<b) {     printf("成功");     break; //在这里加break退出循环 } else { //这里加个else     Q = Q2; //把Q2赋给Q，因为上面用while循环，所以这里会重新回到while的地方再计算的     //如果不管怎么计算都会进入这个else就会死循环，你要考虑用个计数器记录循环次数，超过次数则退出循环 } } //这个是和while的{ 对应

user: user-0
content: 引用 2 楼 自信男孩 的回复：#include <stdio.h> #include<math.h> #define PAI 3.1415926535 #define g 9.8  //void main() int main() {     double p,hf,l,d,v,a,b,Q,Re,e,y,Q1,Q2,y1,y2,R1,R2,e1,e2,H;//s为圆周率     printf("请依次输入密度p、沿程阻力损失hf、管程长度l、直径d、运动黏度v、粗糙度a、精度b、流量Q\n");     //scanf("%f%f%f%f%f%f%f%f",&p,&hf,&l,&d,&v,&a,&b,&Q);     scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p,&hf,&l,&d,&v,&a,&b,&Q);     //Re=(4*Q)/(s*v*d);    //s未初始化     Re=(4*Q)/(PAI*v*d);    //s未初始化     e=(2*a)/d;     if(Re<=2000)     { y=64/Re; }     else if(2000<Re<(59.7/(pow(e,8/7))))     { y=(0.3164/(pow(Re,0.25)));     }     else if((59.7/pow(e,8/7))<Re<((665-765*log10(e))/e))     { y=1/pow((-1.8)*log10((6.8/Re)+pow((a/d)/3.7,1.11)),2);     }     else if(R1>(665-765*log10(e))/e)     { y=1/pow(2*log10((3.7*d)/a),2);     }     //Q1=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y*l.0),0.5);     Q1=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y*l),0.5);     //Re1=(4*Q1)/(PAI*v*d);     R1 = (4*Q1)/(PAI*v*d);     e1 = (2*a)/d;     //if (Re1<=2000)     if (R1<=2000)     {         //y1=64/Re1;         y1=64/R1;     }     //else if(2000<Re1<(59.7/(pow(e1,8/7))))     else if(2000<R1 && R1 < (59.7/(pow(e1,8/7))))     {         //y1=(0.3164/(pow(Re1,0.25)));         y1=(0.3164/(pow(R1,0.25)));     }     //else if((59.7/pow(e1,8/7))<Re1<((665-765*log10(e1))/e1))     else if((59.7/pow(e1, 8/7)) < R1 && R1<((665-765*log10(e1))/e1))     {         //y=1/pow((-1.8)*log10((6.8/Re1)+pow((a/d)/3.7,1.11)),2);         y=1/pow((-1.8)*log10((6.8/R1)+pow((a/d)/3.7,1.11)),2);     }     //else if(Re1>(665-765*log10(e1))/e1)     else if(R1>(665-765*log10(e1))/e1)     { y1=1/pow(2*log10((3.7*d)/a),2);     }     //Q2=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y1*l.0),0.5);     Q2=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y1*l),0.5);     H=(Q1-Q2)/Q1;     if (H<b)     {         printf("成功");     } } 供参考～  一下子定义这么多变量，你还能知道那个是那个吗？如何设置循环

user: user-0
content: 引用 1 楼 qybao 的回复：s没定义，Re1没定义 double p,hf,l,d,v,a,b,Q,Re,e,y,Q1,Q2,y1,y2,R1,R2,e1,e2,H, s=PAI, Re1; 然后查看你的括号是不是都匹配上了，错误提示你少了一个），肯定是在哪里括号没匹配上现在好了，请问一下最后的if后面还有一个else，只要不满足条件则使Q2等于Q，重新计算，应该怎么设置循环啊

user: user-0
content: 现在好了，请问一下，最后那个if后面，还需要一个else，只要不满足，则用Q2代替Q重新计算，应该怎么做啊

user: user-2
content: #include <stdio.h> #include<math.h> #define PAI 3.1415926535 #define g 9.8  //void main() int main() {     double p,hf,l,d,v,a,b,Q,Re,e,y,Q1,Q2,y1,y2,R1,R2,e1,e2,H;//s为圆周率     printf("请依次输入密度p、沿程阻力损失hf、管程长度l、直径d、运动黏度v、粗糙度a、精度b、流量Q\n");     //scanf("%f%f%f%f%f%f%f%f",&p,&hf,&l,&d,&v,&a,&b,&Q);     scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p,&hf,&l,&d,&v,&a,&b,&Q);     //Re=(4*Q)/(s*v*d);    //s未初始化     Re=(4*Q)/(PAI*v*d);    //s未初始化     e=(2*a)/d;     if(Re<=2000)     { y=64/Re; }     else if(2000<Re<(59.7/(pow(e,8/7))))     { y=(0.3164/(pow(Re,0.25)));     }     else if((59.7/pow(e,8/7))<Re<((665-765*log10(e))/e))     { y=1/pow((-1.8)*log10((6.8/Re)+pow((a/d)/3.7,1.11)),2);     }     else if(R1>(665-765*log10(e))/e)     { y=1/pow(2*log10((3.7*d)/a),2);     }     //Q1=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y*l.0),0.5);     Q1=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y*l),0.5);     //Re1=(4*Q1)/(PAI*v*d);     R1 = (4*Q1)/(PAI*v*d);     e1 = (2*a)/d;     //if (Re1<=2000)     if (R1<=2000)     {         //y1=64/Re1;         y1=64/R1;     }     //else if(2000<Re1<(59.7/(pow(e1,8/7))))     else if(2000<R1 && R1 < (59.7/(pow(e1,8/7))))     {         //y1=(0.3164/(pow(Re1,0.25)));         y1=(0.3164/(pow(R1,0.25)));     }     //else if((59.7/pow(e1,8/7))<Re1<((665-765*log10(e1))/e1))     else if((59.7/pow(e1, 8/7)) < R1 && R1<((665-765*log10(e1))/e1))     {         //y=1/pow((-1.8)*log10((6.8/Re1)+pow((a/d)/3.7,1.11)),2);         y=1/pow((-1.8)*log10((6.8/R1)+pow((a/d)/3.7,1.11)),2);     }     //else if(Re1>(665-765*log10(e1))/e1)     else if(R1>(665-765*log10(e1))/e1)     { y1=1/pow(2*log10((3.7*d)/a),2);     }     //Q2=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y1*l.0),0.5);     Q2=pow((g*pow(PAI,2.0)*pow(d,2.0)*hf)/(8.0*y1*l),0.5);     H=(Q1-Q2)/Q1;     if (H<b)     {         printf("成功");     } } 供参考～  一下子定义这么多变量，你还能知道那个是那个吗？

user: user-1
content: s没定义，Re1没定义 double p,hf,l,d,v,a,b,Q,Re,e,y,Q1,Q2,y1,y2,R1,R2,e1,e2,H, s=PAI, Re1; 然后查看你的括号是不是都匹配上了，错误提示你少了一个），肯定是在哪里括号没匹配上