为什么这个 If 语句不执行代码?
Why is this If statement not executing the code?
我检查了所有语法。
#include <stdlib.h>
#include <stdio.h>
int main(){
char * response;
int anger = 0;
int correct = 0;
printf("type Dice");
scanf("%s", response);
if (response == "Dice"){
printf("Good Job!");
correct = 1;
}
}
我试图制作一个响应生成器,但 is 语句不起作用。我尝试将变量响应设置为正确答案并且 if 语句有效,所以我在想我的 scanf 可能有问题。我是 C 的初学者。
您不能使用 == 来比较字符串。请改用 strcmp() 。如果 returns 0,则它们是相同的。
if (strcmp(response,"Dice")==0){
...
}
你做到了 char * response
。这使得一个指向字符的指针变量。现在它没有指向任何内存(它是一些垃圾值)。 scanf
将用户输入存储在从 response
指向的地址开始的连续内存地址中。由于 response
未初始化,输入可能不一定存储在堆栈中(不希望那样)。
现在当你这样做时response=="Dice"
它根本没有任何意义。
关于数组和指针及其比较的一些非常基本的东西。
int arr[10];
现在arr
指向数组的第一个成员,arr+1
指向第二个,arr+2
指向第三个,依此类推。 arr[i]
是 *(arr+i)
.
的 shorthand 表达方式
字符串也是字符数组。
char *str1="Hello";
char *str2="Hello";
if(str1==str2){...}
此处第三行的if 语句所做的是,它与指针进行比较,即检查它们是否都指向同一位置。因为这不是真的,执行不会进入 if 块。您要做的是逐个字符地比较字符串。 string.h
中有一个名为 strcmp()
的内置函数可以执行此操作。
我检查了所有语法。
#include <stdlib.h>
#include <stdio.h>
int main(){
char * response;
int anger = 0;
int correct = 0;
printf("type Dice");
scanf("%s", response);
if (response == "Dice"){
printf("Good Job!");
correct = 1;
}
}
我试图制作一个响应生成器,但 is 语句不起作用。我尝试将变量响应设置为正确答案并且 if 语句有效,所以我在想我的 scanf 可能有问题。我是 C 的初学者。
您不能使用 == 来比较字符串。请改用 strcmp() 。如果 returns 0,则它们是相同的。
if (strcmp(response,"Dice")==0){
...
}
你做到了 char * response
。这使得一个指向字符的指针变量。现在它没有指向任何内存(它是一些垃圾值)。 scanf
将用户输入存储在从 response
指向的地址开始的连续内存地址中。由于 response
未初始化,输入可能不一定存储在堆栈中(不希望那样)。
现在当你这样做时response=="Dice"
它根本没有任何意义。
关于数组和指针及其比较的一些非常基本的东西。
int arr[10];
现在arr
指向数组的第一个成员,arr+1
指向第二个,arr+2
指向第三个,依此类推。 arr[i]
是 *(arr+i)
.
字符串也是字符数组。
char *str1="Hello";
char *str2="Hello";
if(str1==str2){...}
此处第三行的if 语句所做的是,它与指针进行比较,即检查它们是否都指向同一位置。因为这不是真的,执行不会进入 if 块。您要做的是逐个字符地比较字符串。 string.h
中有一个名为 strcmp()
的内置函数可以执行此操作。