C我如何比较2 int

时间:2016-07-24 10:51:21

标签: 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", 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");
}

4 个答案:

答案 0 :(得分:3)

使用scanf()读取整数时,需要提供int变量的地址:

scanf("%d", &solution);

您还需要在==声明中使用=(比较)而不是if(作业)。

答案 1 :(得分:1)

scanf需要一个指向某个地方的指针来放置它正在阅读的信息。

你给它 solution,即使它没有被初始化(因此是一个不确定的值),也很可能不会包含对象的有效地址。

您的意思是给它&solution,这是solution的地址。

顺便说一句,你写了=而不是==打开编译器警告。

答案 2 :(得分:0)

if (solution = randomNumberSum)是分配,您将 randomNumberSum 的值分配给变量解决方案,您的意思实际上是检查两者是否保持相同值...

您需要执行if (solution == randomNumberSum) {

你必须做

scanf("%d", &solution); 

(您需要将变量解决方案的地址作为参数传递)

而不是scanf("%d", solution);

答案 3 :(得分:0)

一些问题:

  1. 您要分配而不是比较(我的(solution == randomNumberSum)与您的(solution = randomNumberSum) - 这会导致输出始终为真
  2. 您为scanf提供整数值,而不是指向整数的指针。
  3. 查看更正后的代码:

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