C 如何比较2 int

C 如何比较2 int,c,if-statement,integer,addition,C,If Statement,Integer,Addition,我想做一个验证码一样的检查,但它所做的只是崩溃。 代码怎么了? 我的代码如下所示: printf("I need to make some tests to ensure that you are a human being.\n"); printf("Let's start\n"); int randomNumber1 = rand() % 100; int randomNumber2 = rand() % 100; printf("What is %d + %d ?\n", randomN

我想做一个验证码一样的检查,但它所做的只是崩溃。 代码怎么了? 我的代码如下所示:

printf("I need to make some tests to ensure that you are a human being.\n");
printf("Let's start\n");

int randomNumber1 = rand() % 100;
int randomNumber2 = rand() % 100;
printf("What is %d + %d ?\n", randomNumber1, randomNumber2);
int randomNumberSum = randomNumber1 + randomNumber2;
int solution;
printf("%d \n", randomNumberSum);
scanf("%d", solution);

if (solution = randomNumberSum) {
    printf("Good job human !\n");

} else {
printf("Nice try, bot \n");
}
如果(solution=randomNumberSum)
是赋值,则将randomNumberSum的值赋值给变量solution,实际上是检查两者是否持有相同的值

如果(solution==randomNumberSum){

你必须这么做

scanf("%d", &solution); 
(需要将变量解决方案的地址作为参数传递)

使用
scanf()
读取整数时,需要提供
int
变量的地址,而不是
scanf(“%d”,解决方案);

scanf("%d", &solution);
您还需要在
if
-语句中使用
=
(比较)而不是
=
(赋值)。

两个问题:

  • 您正在分配而不是比较(my
    (solution==randomNumberSum)
    与您的
    (solution=randomNumberSum)
    -这会使输出始终为真
  • 您向scanf提供一个整数值,而不是指向整数的指针
  • 请参阅更正的代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char** argv)
    {
        printf("I need to make some tests to ensure that you are a human being.\n");
        printf("Let's start\n");
    
        int randomNumber1 = rand() % 100;
        int randomNumber2 = rand() % 100;
        printf("What is %d + %d ?\n", randomNumber1, randomNumber2);
        int randomNumberSum = randomNumber1 + randomNumber2;
        int solution;
        printf("%d \n", randomNumberSum);
        scanf("%d", &solution);
    
        if (solution == randomNumberSum) {
            printf("Good job human !\n");
    
        } else {
            printf("Nice try, bot \n");
        }
    }
    
    #包括
    #包括
    int main(int argc,字符**argv)
    {
    printf(“我需要做一些测试以确保您是人。\n”);
    printf(“让我们开始”\n);
    int randomNumber1=rand()%100;
    int randomNumber2=rand()%100;
    printf(“什么是%d+%d?\n”,randomNumber1,randomNumber2);
    int randomNumberSum=randomNumber1+randomNumber2;
    int解;
    printf(“%d\n”,randomNumberSum);
    scanf(“%d”和“解决方案”);
    如果(解决方案==randomNumberSum){
    printf(“干得好的人!\n”);
    }否则{
    printf(“很好的尝试,bot\n”);
    }
    }
    
    scanf
    需要一个指向某个位置的指针来放置它正在读取的信息

    您给它一个值
    solution
    ,即使它不是未初始化的(因此是一个不确定的值),也不太可能包含对象的有效地址

    您打算给它
    &解决方案
    ,它是
    解决方案
    的地址


    另外,您编写了
    =
    而不是
    =
    打开编译器警告。

    编译器警告不仅仅是为了显示进度。启用并注意它们!请注意,您应该在发出请求之前启用并解决警告。更好的是,不要使用
    scanf
    进行用户输入。@melpomene:您会怎么做你建议改为使用@LightnessRacesinOrbit
    fgets
    作为实际输入,然后根据需要使用
    sscanf
    atoi
    strtol
    。如果我在解决方案前加上“&”,它会很好地工作。为什么会这样?@DavisR5因为
    scanf()
    需要知道把数字放在哪里。
    解决方案本身只是一个未初始化的整数,但
    &solution
    是一个存储该整数值的地址。“应该”/“必须”,而不是“应该”-这不是建议!而且你缺乏解释。我不知道人们为什么会这样做…C类问题很常见。我只是不再对此大惊小怪了