C 为什么这个If语句不执行代码?
我已经检查了所有语法C 为什么这个If语句不执行代码?,c,if-statement,response,generator,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; }
#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;
}
}
#包括
#包括
int main(){
字符*响应;
int anger=0;
int correct=0;
printf(“类型骰子”);
scanf(“%s”,响应);
如果(响应=“骰子”){
printf(“干得好!”);
正确=1;
}
}
我正在尝试生成响应生成器,但is语句不起作用。我试着将变量响应设置为正确答案,if语句起作用了,所以我想可能是我的scanf出了问题。我是C语言的初学者。您不能使用==来比较字符串。请改用strcmp()。如果返回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()
,它可以实现这一点 响应
未初始化。scanf
有问题,但不限于…未分配的响应
。与字符串文字进行比较。在c语言中不能使用==
来比较字符串,实际上您没有字符串,您有指向图表的未初始化指针,这不是唯一的问题。您不能使用==
运算符比较字符串。不要破坏您的问题或对其进行编辑,使答案没有上下文!你读过注释吗?没有认可代码的其余部分,但这是阻止它编译的问题。我不认为它阻止了编译。是的,它应该给我一大堆警告。奇怪的是它没有给我任何警告?而且我把应变帽放进去,我给了我非零状态,这里是我的代码#include#include#include int main(){char*response;int anger=0;int correct=0;printf(“type Dice”);scanf(%s),&response);int compare=strncp(response,“Dice”,20);if(compare==0)printf(“干得好!”);返回0;}有趣的是,最后一个示例实际上可以计算为true
,因为str1
和str2
指向相等的字符串文本,编译器很可能决定不复制它们,并且只有一个“您好“
已分配。您必须具有字符串文字比较警告。不要忽略编译器警告。他们在那里待了一段时间reason@EugeneSh. 不确定编译器是否会这样做,因为编译器希望在以后的代码中保留更改的范围。是的,它将:。顺便说一句,这些应该是指针(为您修复了它…)。编译器不关心将来的更改。在程序中,我们试图改变两个字符串中的任何一个。编译器可能会使str1
和str2
指向相同的位置,否则一个字符串中的更改将更改另一个字符串