我是C的新手,所以我不太熟悉它的语法,但是我调试了我的代码并研究了正确的语法,而且它似乎是正确的,我也改变了范围变量,以查看是否导致错误。
if语句应该比较两个变量,它们都保存字符串,我甚至打印出两个变量以确保它们是相同的,但它仍然直接跳到if语句的else部分。任何人都可以给我任何关于为什么它不会运行if语句的指示,它只是直接跳到“不正确的”#。
correctWord
变量在代码的不同部分定义。
查找完整代码here。
-UPDATE -
我现在已经更新了代码的语法,但它仍然返回false。
char correctWord[20];
void userGuess(){
char userWordGuess[20];
printf("Anagram: ");
printf(anagramWord);
printf("Your Guess: ");
scanf("%s",userWordGuess); //Reads in user input
printf(correctWord);
printf(userWordGuess);
if(strcmp(userWordGuess, correctWord) == 0){
printf("Congratulations, you guessed correctly!");
}else{
printf("Incorrect, try again or skip this question");
}
}
答案 0 :(得分:6)
你无法使用==
比较C中的字符串,因为这会比较字符串的地址,而不是字符串的内容。 (你当然不需要,显然,两个字符串的地址也不相等。)
C有一个相当不错的函数:strcmp()
如果两个字符串相等则返回0
。
尝试在if
条件中使用此功能:
if (!strcmp(userWordGuess,correctWord))
{
//Yay! Strings are equal. Do what you want to here.
}
在使用#include <string.h>
之前务必strcmp()
。
答案 1 :(得分:4)
在C中,您无法使用==
比较字符串。您将最终比较字符串的地址,这是不一样的。
你需要调用strmcp()
函数,如果它的参数(两个字符串)相等,它将返回0
。
所以代码应该是if(strcmp(userWordGuess, correctWord) == 0)
。
答案 2 :(得分:3)
您正在比较不同阵列的地址,这些地址总是不相等的。
您需要使用strcmp
或其他一些字符串库函数来逐字符地比较字符串。
答案 3 :(得分:2)
userWordGuess == correctWord
将比较指针(即数组内存中的位置),这些指针可能不相等。
对于C中的字符串比较,请使用strcmp
(或strncmp
):
if (!strcmp(userWordGuess, correctWord)){
/*Strings are equal*/
答案 4 :(得分:1)
使用
if(strcmp(userWordGuess, correctWord) == 0) // strings are equal
{
printf("Congratulations, you guessed correctly!");
}
else // not equal
{
printf("Incorrect, try again or skip this question");
}
如果两个字符串都等于if
条件将运行。否则它将运行else
答案 5 :(得分:1)
字符串不是C
语言的一等公民。字符串表示为字符数组或指向此类数组的指针。
在这两种情况下,用于访问字符串的变量是字符串第一个字符的内存地址的同义词。
与userWordGuess == correctWord
比较的不是字符串,而是它们在内存中的地址。由于userWordGuess
和correctWord
是两个不同的字符数组,因此它们在内存中的地址始终不同,并且它们的比较将始终生成FALSE
。
为了比较实际的字符串值,您必须使用标准函数strcmp()
或其中一个变体(在文档页面的底部找到它们)。
代码更改:
/** Need to include the header that declares the strcmp() function */
#include <string.h>
char correctWord[20];
void userGuess(){
char userWordGuess[20];
/** stripped some lines here ... */
/** compare the strings, not their addresses in memory */
if (strcmp(userWordGuess, correctWord) == 0) {
/** the rest of your code */
答案 6 :(得分:1)
你在这里做的是比较两个指针。 userWordGuess和correctWord将每个字符指向一个字符数组的开头(这是您在示例代码开头定义的)。
因此,如果要比较两个字符数组,可以使用string.h中定义的strcmp函数
学习数组和指针之间的关系非常重要。指针算术在这里也很重要。看看这个:Arrays, Pointers, Pointer Arithmetic