C中的If语句总是返回false
我对C语言相当陌生,所以我对它的语法不太熟悉,但是我已经调试了我的代码并研究了正确的语法,它似乎是正确的,我还改变了变量的范围,看看这是否是导致错误的原因 if语句应该比较两个变量,这两个变量都包含字符串,我甚至打印了这两个变量以确保它们是相同的,但是它仍然直接跳到if语句的else部分。有谁能给我指点一下为什么它不运行if语句,它只是直接跳到“不正确”的位置 correctWord变量在代码的不同部分定义 查找完整代码 -更新- 我现在已经更新了代码的语法,但是仍然返回falseC中的If语句总是返回false,c,if-statement,strcmp,c-strings,C,If Statement,Strcmp,C Strings,我对C语言相当陌生,所以我对它的语法不太熟悉,但是我已经调试了我的代码并研究了正确的语法,它似乎是正确的,我还改变了变量的范围,看看这是否是导致错误的原因 if语句应该比较两个变量,这两个变量都包含字符串,我甚至打印了这两个变量以确保它们是相同的,但是它仍然直接跳到if语句的else部分。有谁能给我指点一下为什么它不运行if语句,它只是直接跳到“不正确”的位置 correctWord变量在代码的不同部分定义 查找完整代码 -更新- 我现在已经更新了代码的语法,但是仍然返回false char c
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");
}
}
您正在比较不同数组的地址,这些地址总是不相等的 您需要使用strcmp或其他字符串库函数逐字符比较字符串。userWordGuess==correctWord将比较指针,即数组在内存中的位置,这些位置可能不相等 对于C中的字符串比较,请使用strcmp或strncmp:
在C语言中,不能使用==来比较字符串。您将最终比较字符串的地址,这是不同的 您需要调用strmcp函数,如果它的参数和两个字符串相等,它将返回0 因此,代码应该是ifstrcmpuserWordGuess,correctWord==0。使用
if(strcmp(userWordGuess, correctWord) == 0) // strings are equal
{
printf("Congratulations, you guessed correctly!");
}
else // not equal
{
printf("Incorrect, try again or skip this question");
}
如果两个字符串相等,则条件将运行。否则它将运行else您不能使用==比较C中的字符串,因为这将比较字符串的地址,而不是字符串的内容。你当然不需要,而且很明显,两个字符串的地址也不相等
C有一个非常好的函数:如果两个字符串相等,则返回0
在您的if条件下尝试使用此选项:
if (!strcmp(userWordGuess,correctWord))
{
//Yay! Strings are equal. Do what you want to here.
}
请确保在使用strcmp之前包含字符串。字符串不是C语言中的头等公民。字符串表示为字符数组或指向此类数组的指针 在这两种情况下,用于访问字符串的变量都是字符串的第一个字符在内存中的地址的同义词 与userWordGuess==correctWord比较的不是字符串,而是它们在内存中的地址。由于userWordGuess和correctWord是两个不同的字符数组,它们在内存中的地址总是不同的,并且它们的比较总是会产生FALSE 为了比较实际字符串值,您必须使用标准函数或其变体之一,在文档页面的底部找到它们 代码更改:
/** 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 */
你在这里做的是比较两个指针。userWordGuess和correctWord分别指向一个字符数组的开头,这是您在示例代码开头定义的 因此,如果要比较两个字符数组,可以使用string.h中定义的函数
了解数组和指针之间的关系很重要。指针算法在这里也很重要。检查此项:使用strcmp或strncmp比较字符串。您不设置correctWord的值。如果strcmpuserWordGuess,correctWord==0,则应进行比较{…correctWord和userWordGuess是指针!它们代表的地址是您声明的两个20字节字符串所在的位置!因为您要比较字符串,所以解决方案正如CoreyStop所说的那样!为什么投票被否决?问题表达得很好,问题很清楚,相关代码显示得很好,格式也很好。我不理解道琼斯指数n投票,我也试着对这个问题非常公平和清楚,但仍然无法让它工作,尽管谢谢,尝试实现了这一点,但它仍然一直返回false?@TobyCannon解释在你的屏幕截图中。你的一个字符串使用fgets从文件中读取的字符串以换行结束,另一个没有。谢谢在您的帮助下,我尝试了此操作,但仍返回false,请在此处@TobyCannon查找完整代码。可能您没有正确读取用户输入。您需要从stdin中丢弃换行符。
/** 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 */