C++ 主服务器不返回0

C++ 主服务器不返回0,c++,C++,因此,我有这个练习,我需要要求用户提供2个输入(等级>0如果条件错误,您的: if (g = 1) 将g设置为1,并且始终为真。您要做的是: if (g == 1) 正如Scott在评论中所说,您不应该调用main,而应该使用while循环。如果您的条件错误: if (g = 1) 将g设置为1,并且始终为真。您要做的是: if (g == 1) 正如Scott在他的评论中所说,你不应该调用main,而应该使用while循环。问题是要测试相等性,你需要两个=,而不是一个,所以你的两个检查

因此,我有这个练习,我需要要求用户提供2个输入(等级>0如果条件错误,您的

if (g = 1)
g
设置为1,并且始终为真。您要做的是:

if (g == 1)

正如Scott在评论中所说,您不应该调用main,而应该使用
while
循环。

如果您的
条件错误:

if (g = 1)
g
设置为1,并且始终为真。您要做的是:

if (g == 1)

正如Scott在他的评论中所说,你不应该调用main,而应该使用
while
循环。

问题是要测试相等性,你需要两个
=
,而不是一个,所以你的两个检查实际上是给
g
赋值,而不是与
g
比较

    if (g == 1) {
        main();
    }
    else if (g == 2) {
        return 0;
    }
任何一个现代编译器都应该给你一个关于这个赋值的编译器警告。你应该始终注意编译器警告

还有你的逻辑

if ((n1 || n2) > 10)

else如果((n1 | | n2)<0)
是不正确的,但我会让你找出什么是错误的(这毕竟是家庭作业)


最后,您可能希望执行
do while
循环,而不是反复调用
main()

问题是要测试是否相等,您需要两个
=
,而不是一个,因此您的两个检查实际上是将值分配给
g
而不是与
g

    if (g == 1) {
        main();
    }
    else if (g == 2) {
        return 0;
    }
任何一个现代编译器都应该给你一个关于这个赋值的编译器警告。你应该始终注意编译器警告

还有你的逻辑

if ((n1 || n2) > 10)

else如果((n1 | | n2)<0)
是不正确的,但我会让你找出什么是错误的(这毕竟是家庭作业)


最后,您可能希望查看执行
do while
循环,而不是反复调用
main()

请查看这些修改

float n1;
float n2;
int g = 1;
while (g != 2)
{
    cout << "Please enter two grades: " << endl;
    cin >> n1;
    cin >> n2;
    if ((n1 || n2) > 10) {
        cout << "Wrong grade";
    }
    else if ((n1 || n2) < 0) {
        cout << "Wrong grade";
    }
    else {
        cout << "The grade average is " << (n1 + n2) / 2 << endl;
        cout << "Do you want to insert more grades ? " << endl;
        cin >> g;
    }
}
return 0;
float n1;
浮氮气;
int g=1;
而(g!=2)
{
cout-n1;
cin>>n2;
如果((n1 | n2)>10){

请看这些修改

float n1;
float n2;
int g = 1;
while (g != 2)
{
    cout << "Please enter two grades: " << endl;
    cin >> n1;
    cin >> n2;
    if ((n1 || n2) > 10) {
        cout << "Wrong grade";
    }
    else if ((n1 || n2) < 0) {
        cout << "Wrong grade";
    }
    else {
        cout << "The grade average is " << (n1 + n2) / 2 << endl;
        cout << "Do you want to insert more grades ? " << endl;
        cin >> g;
    }
}
return 0;
float n1;
浮氮气;
int g=1;
而(g!=2)
{
cout-n1;
cin>>n2;
如果((n1 | n2)>10){

CUT使用<代码>而不是调用<代码>主()/代码> .TyPOS。<代码> G=1 和<代码> G = 2 。它们需要是<代码> G==1 < /C>和<代码> g=2 < /Cord>。在C++中未定义为<代码>主< /代码>。您的程序无效。使用循环。调用主()在你的程序中有一个不好的做法。你可以查找递归,什么时候使用它,以及如何摆脱它。使用
while
循环,而不是调用
main()<代码> > TyPo.<代码> g=1 < /C> >代码> g=2 < /代码>。它们需要是<代码> g=1 和 G==2 。在C++中未定义为<代码>主< /代码>。您的程序无效。使用循环。调用主()在你的程序中有一个不好的做法是啊,查找递归,什么时候使用它,以及如何从中解脱出来。赞成把常数放在第一位。反对的理由是一样的——这比helps@Slava真的吗?请给我举个例子,说明它在哪里造成伤害,因为我想不出有什么危害。在我过去的一份工作中,他们有一个固定点的类(用来计算金钱)。它有
运算符double()
if(1.0==money)
会给你调试带来无尽的麻烦。任何现代编译器都很容易发现赋值而不是比较问题。我个人认为“常量优先”习惯用法是不可读的。我更喜欢将
g
声明为
const
,这确实需要将
int g;cin>>g;
放在一个单独的函数/lambda中。但这主要是标准流的一个弱点,而不是
const
将常量放在第一位。出于同样的原因,将其放在第二位,这样做的更多伤害helps@Slava真的吗?请给我一个例子,说明它在哪里会造成伤害,因为我想不出任何伤害。在我过去的一份工作中,他们有一个固定点的类(计算金钱)。它有
操作符double()
if(1.0==money)
在调试时会给你带来无尽的麻烦。任何现代编译器都很容易发现赋值而不是比较问题。我个人认为“常量优先”习惯用法不可读。我更喜欢将
g
声明为
const
,这确实需要将
int g;cin>>g;
放在一个单独的函数/lambda中。但这主要是标准流的一个弱点,而不是
const