为什么这个 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() 的内置函数可以执行此操作。