2013-01-20 44 views
0

我正在使用下面的代码(它已被超级简化以获得我的问题的根源)。C++变量值不变

#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”是否被重新定义?

这里怎么回事?

回答

8

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

+0

哇......我太蠢了。 :/ 谢谢! – codedude

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是在这种情况下有益,因为它给你一个关于试验任务的警告条件。

+0

明白了!谢谢。我需要密切关注那些等号:) – codedude

1

在专家的回答中,您正在使用=而不是在函数体中使用==,这就是为什么你会得到错误的输出。

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

赋值运算符(=):

赋值操作符分配一个值到一个变量。例如

user = 1;

此语句分配整数值1到可变user

此语句总是被执行,表示它是逻辑上TRUE声明(假设变量user已声明)。

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

等号(==):

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

user == 1;

本声明将与1变量user的价值相比较,它会返回TRUE如果user1否则将返回FALSE

结果:赋值运算符将始终返回TRUE但比较操作可能会返回TRUEFALSE

现在回来到您的代码:

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); 
} 

所以,实际上,当你调用这个函数,它会不顾传递给这个函数的user价值1每次打印。因为,你已经调用了这个函数2次。因此,它将打印11