C ++变量值不变

时间:2013-01-20 04:08:00

标签: c++ variables

我正在使用以下代码(它已被超级简化以找到问题的根源)。

#include <iostream>
namespace std;

int user;
int submit(int);

int main() {

    user = 1;
    submit(user);

    user = 2;
    submit(user);

    return(0);
}

int submit(int user) {

    if (user = 1) {
        printf("1");
    } else if (user = 2) {
        printf("2");
    }
    return(0);

}

我认为这会打印出“12”,但我会得到“11”。在第二次调用函数之前,变量“user”是不是被重新定义了?

这里出了什么问题?

3 个答案:

答案 0 :(得分:8)

使用==而不是=来检查user的值。您正在覆盖这些值(使用=)而不是比较它们(使用==)。

答案 1 :(得分:6)

您在函数体中使用=而不是==

if (user = 1) { //This assigns user the value of 1 and then prints 1
         printf("1");

正确的测试条件应该是:

if (user == 1) { //This checks the value of user and then prints if the condition is true
         printf("1");

在编译时,如果使用gcc,在这种情况下添加选项-Wall会有所帮助,因为它会在测试条件中向您发出有关分配的警告。

答案 2 :(得分:1)

正如专家所回答的那样,您正在使用=而不是在函数体中使用==,这就是输出错误的原因。

在这里,我想清楚你的概念为什么会发生: 我希望你知道赋值运算符和相等运算符之间的区别。如果没有,我将简要描述一下。

作业运算符(=):

赋值运算符为变量赋值。 e.g。

user = 1;

此语句将整数值1赋给变量user

此语句将始终执行,表明它是逻辑TRUE语句(假设已经声明变量user)。

由于没有比较或类似的东西,所以如果我们使用Assignment运算符(=)作为条件,它将始终返回TRUE1

平等运营商(==):

等于运算符用于比较两个值以确定它们是否相等。

user == 1;

此语句会将变量user的值与1进行比较,如果TRUE的值为user,则会返回1,否则会返回FALSE TRUE

结果:分配运算符将始终返回TRUE,但比较运算符可能会返回FALSEint submit(int user) { //as you're using assignmnt operator this if condition will always true regardless of input if (user = 1) { printf("1"); //because if condition is true, it will never go into else if condition } else if (user = 2) { printf("2"); } return(0); }

现在回到你的代码:

1

因此,实际上,无论何时调用此函数,每次都会打印user,无论传递给此函数的11值是多少。因为,你已经调用了这个函数2次。因此,它会打印nw.innerHTML = nw.innerHTML + "<div class='" + nodeType + "' id='" + i + "'><div class='nodeName'>" + json[i][0] + "</div></div>";