我想做一个类似captcha的检查,但它所做的只是崩溃。代码出了什么问题?我的代码如下:
printf("I need to make some tests to ensure that you are a human being.n");
printf("Let's startn");
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");
}
使用scanf()
读取整数时,需要提供int
变量的地址:
scanf("%d", &solution);
此外,您还需要在if
-语句中使用==
(比较)而不是=
(赋值)。
scanf
需要一个指向放置它正在读取的信息的位置的指针。
您给它一个值solution
,即使它不是未初始化的(因此是一个不确定的值),也不太可能包含对象的有效地址。
你打算给它&solution
,这是solution
的地址。
另外,顺便说一下,您编写的是=
而不是==
打开编译器警告
if (solution = randomNumberSum)
是赋值,您将randomNumberSum的值赋值给变量解决方案,您的意思实际上是检查两者是否持有相同的值。。。
你需要做if (solution == randomNumberSum) {
你必须做
scanf("%d", &solution);
(您需要将变量解决方案的地址作为参数传递)
而不是scanf("%d", solution);
几个问题:
- 你在分配而不是比较(我的
(solution == randomNumberSum)
和你的(solution = randomNumberSum)
——这会导致输出始终为真 - 您为scanf提供了一个整数值,而不是指向integer的指针
请参阅更正后的代码:
#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 startn");
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");
}
}