Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何成功地摆脱这种边做边做的循环?_C++ - Fatal编程技术网

C++ 如何成功地摆脱这种边做边做的循环?

C++ 如何成功地摆脱这种边做边做的循环?,c++,C++,这段代码一直很顺利,直到我明确地在DO-WHILE循环中包含包含一个中断的IF-STATEMENT,如果fv1=0,它应该报告一个数学错误(因为任何除以零的值都是未定义的)。然而,意外的结果被打印出来了 #include <iostream> #include <cmath> #include <iomanip> using namespace std; const double R = 0.082054; double f(double a,double

这段代码一直很顺利,直到我明确地在DO-WHILE循环中包含包含一个中断的IF-STATEMENT,如果fv1=0,它应该报告一个数学错误(因为任何除以零的值都是未定义的)。然而,意外的结果被打印出来了

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

const double R = 0.082054;
double f(double a,double b,double P,double T,double v);
double f(double a,double b,double P,double T,double v)
{
    double q =P*pow(v,3)-(P*b+R*T)*pow(v,2)+a*v-a*b;
    return q;
}
double fPrime(double a,double b,double P,double T,double v);
double fPrime(double a,double b,double P,double T,double v)
{
    double s =3*P*pow(v,2)-2*(P*b+R*T)*pow(v,1)+a;
    return s;
}
int main()
{
//INPUT STAGE!
cout << "Use gas constant, R: " << R << endl;

double a,b,P,T,Tc;
cout << "\nUse test value, a: ";
cin >> a;
cout << "\nUse test value, b: ";
cin >> b;
cout << "\nUse pressure, P (atm): ";
cin >> P;
cout << "\nUse absolute temperature, T (K): ";
cin >> T;

double v,v1=0,fv,fv1,N,e;
int iteration = 0;
cout << "\nUse initial guess for molal volume, v: ";
cin >> v;
cout << "\nUse maximum number of iterations, N: ";
cin >> N;
cout << "\nUse tolerance, e: ";
cin >> e;
cout << "\n";

do
{
    v = v1;
    fv = f(a,b,P,T,v);
    fv1 = fPrime(a,b,P,T,v);
    if (fv1=0)
    {
       cout << "Math Error";
       break;
    }
    v1 = v-(fv/fv1);
    cout << iteration+1 << setw(12) << v << setw(16) << v1 << setw(16) << abs(v1-v) << endl;
    iteration++;
}
while(iteration<N && abs(v1-v)>e);

return 0;
}
#包括
#包括
#包括
使用名称空间std;
常数双R=0.082054;
双f(双a、双b、双P、双T、双v);
双f(双a、双b、双P、双T、双v)
{
双q=P*pow(v,3)-(P*b+R*T)*pow(v,2)+a*v-a*b;
返回q;
}
双F素(双a、双b、双P、双T、双v);
双F参数(双a、双b、双P、双T、双v)
{
双s=3*P*pow(v,2)-2*(P*b+R*T)*pow(v,1)+a;
返回s;
}
int main()
{
//输入阶段!
cout-P;
cout>T;
双v,v1=0,fv,fv1,N,e;
int迭代=0;
cout>v;
cout>N;
cout>e;

coutbreak语句结束最近的封闭循环或条件语句的执行,该语句出现在-

顺便说一下,你给fv1分配了0

使用


break语句结束最近的封闭循环或条件语句的执行,该语句出现在-

顺便说一下,你给fv1分配了0

使用


尝试将条件从
fv1=0
更改为
fv1==0
这是赋值运算符
=

而这是比较运算符
=

尝试将if条件从
fv1=0
更改为
fv1==0
这是赋值运算符
=

然而,这是在比较运算符
==

,这样中断就不会终止DO-WHILE循环吗?@Mark Louie in
如果(fv1=0)
您将零分配给
fv1
,然后测试它是真是假。它将始终为假,因为您将0分配给
fv1
@Mark-是的,它将为“条件语句”是一种用词不当的说法……if(bool){break;}将使您退出包含条件的循环,而不仅仅是条件的。@peedurr-谢谢您的回答!John-所以是循环有条件的。谢谢先生!那么break不会终止DO-WHILE循环吗?@Mark Louie in
if(fv1=0)
您将零赋值给
fv1
,然后测试它是否为真。它将始终为假,因为您将0赋值给
fv1
@Mark-是的,它会-条件语句是一种误称……如果(bool){break;}将使您退出包含条件的循环,而不仅仅是条件。@peedurr-谢谢您的回答!@John-所以是循环包含了条件。谢谢,先生!回答得好。您可以扩展您的回答以澄清为什么“if(fv1=0)”检查失败了。未来的人发现你的答案可能不知道为什么C++会处理“FV1=0”的结果。和false一样。好了,现在它起作用了。谢谢,先生。应该使用比较运算符。现在我不知道break语句是否能让我脱离DO-WHILE循环,是吗?非常感谢@A-levy,我是个新手。我必须编辑我的答案来解释这一点,对吗?回答不错。你可以扩展你的答案来澄清为什么“if(fv1=0)”检查失败了。未来的人发现你的答案可能不知道为什么C++会处理“FV1=0”的结果。和false一样。好了,现在它成功了。谢谢,先生。应该使用比较运算符。现在我不知道break语句是否能让我脱离DO-WHILE循环,是吗?非常感谢@A-levy,我是个新手。我必须编辑我的答案来解释,对吗?
if (fv1 == 0)
if (0 == fv1)