为什么这个If语句没有执行代码?

时间:2017-05-03 21:54:49

标签: c if-statement response generator

我检查了所有语法。

#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的初学者。

2 个答案:

答案 0 :(得分:1)

您无法使用==来比较字符串。请改用strcmp()。如果它返回0,则它们相同。

if (strcmp(response,"Dice")==0){
   ...
}

答案 1 :(得分:1)

你做过char * response。这使得指针变量为一个字符。现在它没有指向任何内存(这是一些垃圾值)。 scanf将用户输入存储在从response指向的连续内存地址中。由于response未初始化,输入可能不一定存储在堆栈中(不要那样)。

现在当你做response=="Dice"时,它根本不是什么意思。

关于数组和指针的一些非常基本的东西以及它们的比较。

int arr[10];

现在arr指向数组的第一个成员,arr+1指向第二个,arr+2指向第三个,依此类推。 arr[i]是说*(arr+i)的简写方式。

String也是一个字符数组。

char *str1="Hello";
char *str2="Hello";
if(str1==str2){...}

第三行中if语句的作用是,它与指针进行比较,即它检查它们是否都指向同一位置。由于这不是真的,执行不会进入if块。你想要做的是逐个字符地比较字符串。 string.h中有一个名为strcmp()的内置函数可以做到这一点。