我正在使用以下代码(它已被超级简化以找到问题的根源)。
#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”是不是被重新定义了?
这里出了什么问题?
答案 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运算符(=)作为条件,它将始终返回TRUE
或1
平等运营商(==):
等于运算符用于比较两个值以确定它们是否相等。
user == 1;
此语句会将变量user
的值与1
进行比较,如果TRUE
的值为user
,则会返回1
,否则会返回FALSE
TRUE
。
结果:分配运算符将始终返回TRUE
,但比较运算符可能会返回FALSE
或int 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>";
。