0

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

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

这里出了什么问题?

4

3 回答 3

8

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

于 2013-01-20T04:09:25.267 回答
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在这种情况下很有帮助,因为它会在测试条件下向您发出有关分配的警告。

于 2013-01-20T04:10:23.287 回答
1

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

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

赋值运算符 (=):

赋值运算符为变量赋值。例如

user = 1;

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

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

由于没有比较或类似的东西,所以如果我们使用赋值运算符(=)作为条件,它总是会返回TRUE1

等式运算符(==):

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

user == 1;

该语句将比较变量的值user,如果是则1返回,否则返回。TRUEuser1FALSE

结果:赋值运算符将始终返回TRUE,但比较运算符可能返回TRUEor 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传递给此函数的值如何。因为,你已经调用了这个函数 2 次。因此,它将打印11.

于 2016-12-30T17:03:45.613 回答