如果其他与> =(2次)一起编译好但不起作用

时间:2011-11-14 20:50:01

标签: c++ if-statement

我正在制作一个成绩日志应用程序,我在这里有这段代码,因为我不打算工作。 (它编译很好,没有错误,但不起作用)(请记住我是C ++的初学者,谢谢你的时间和知识,以帮助我学习)。 (测试核心是从一系列问题中得出的,如果正确则值为+1,如果错误则为-1。

我认为错误在=>它与另一个相冲突,但我不知道如何为ex赋值。如果得分是< 20 cout =如果< 40失败,但看到20< 40这样一个覆盖另一个我怎么能把它从20-40 cout =失败好,如果它从0 - 20 cout =失败。我希望你明白我的意思。

   int testscore;
    string studentmark;

            if ( testscore  == 10 )

            {
                studentmark == ( "failed" );
            }
            else if ( testscore >= 11 && testscore <= 20 )
            {
                studentmark == ( "closebutfailed" );
            }
            else if ( testscore >= 21 && testscore <= 30)
            {
                studentmark == ( "passed" );
                }
            else if ( testscore >= 31 && testscore <= 40 )
            {
                studentmark == ("excelent");
            }
            else if ( testscore >=49 )
            {
                studentmark == ("hasteachersbook");
            }
cout << "Studentmark is:" << studentmark << endl;

8 个答案:

答案 0 :(得分:14)

首先,您的问题是您应该使用单个等号进行分配,例如

studentmark   = "failed";
///         ^^^^ Note single =

其次,你最好把这些if语句写成

if (testscore <= 10) { ... }
else if (testscore <= 20) { ... }
else if (testscore <= 30) { ... }
...

因为它更容易阅读,并且else语句的存在意味着您不必测试testscore是否大于您已经涵盖的金额。

答案 1 :(得分:5)

==测试平等,=分配。

当你写studentmark == ( "failed" );时,你正在测试字符串studentmark是否等于"failed",然后丢掉答案。

答案 2 :(得分:2)

您需要为studentmark分配值,如下所示:

studentmark = "hasteachersbook";

==检查值是否相等。 =分配一个值。

这应该有效。如果没有,问题出在其他地方。

int testscore;
string studentmark;

if ( testscore  == 10 )
{
    studentmark = "failed";
}
else if ( testscore >= 11 && testscore <= 20 )
{
    studentmark = "closebutfailed";
}
else if ( testscore >= 21 && testscore <= 30)
{
    studentmark = "passed";
    }
else if ( testscore >= 31 && testscore <= 40 )
{
    studentmark = "excelent";
}
else if ( testscore >=41 )
{
    studentmark = "hasteachersbook";
}
else
{
    studentmark = "scoreLessThanTen";
}

答案 3 :(得分:2)

您的代码无效,因为您尝试使用==进行分配。那里没有代码实际上改变了studentmark的值。

答案 4 :(得分:2)

看一下,你的案例是31-40,然后是49及以上。

没有41-48的情况。

我不知道这在C ++中是否可行,但可能会考虑使用CASE

答案 5 :(得分:1)

studentmark == ( "closebutfailed" );未将值“closebutfailed”分配给studentmark - 它会在“closebutfailed”和studentmark之间进行相等比较,这可能会返回false。< / p>

将这些更改为分配而不是比较,然后重试。

答案 6 :(得分:1)

你的问题似乎是“如果if-else链中不止一个测试的价值是真的会怎么样?”

C ++以文本顺序进行评估,即从上到下进行评估。因此,对于给定值为true的第一个谓词将是所选的分支。

例如:

int a = 2;

if (a > 0) {
  cout << "First branch";
} else if (a > 1) {
  cout << "Second branch";
}

即使两个测试都适用于a = 2,第一个测试也会被选中,因为它是第一个。因此,打印出First branch

答案 7 :(得分:0)

软件开发是1%的灵感和99%的调试。如果无法调试,则无法编写软件。

一种经常使用的调试技术 - KISS:

注释或删除尽可能多的gunge以尝试使程序实际执行某些操作。当你到达:

int testscore;
string studentmark;
        {
            studentmark == ( "failed" );
        }
cout << "Studentmark is:" << studentmark << endl;

..并且你仍然没有得到学生标记输出,肯定会发现你的尝试作业不起作用,因此几乎肯定是错误的(正如其他海报已经解释的那样,'=='!='=')

在发布这里之前练习/开发你的调试技巧 - 从长远来看,你会比将一些琐碎但非工作的代码传递给一群经验丰富的开发人员并让他们修复你的bug更好