C 在主函数中忽略If语句

C 在主函数中忽略If语句,c,if-statement,fgets,C,If Statement,Fgets,我目前正在用C编写一段代码,我在主函数中的if语句被忽略了。如您所见,此代码接收一些字符串作为输入,并应用凯撒密码。注意:main中调用的函数加密也已定义,我只是不粘贴,因为我认为没有必要,因为问题是,当我询问用户是否要加密或解密文本时,在fgets之后,if语句被完全忽略(在编写“encrypt”后,程序就退出了)。 代码如下: int main() { char text[SIZE], choice[SIZE]; printf("\nWelcome to Caesar's C

我目前正在用C编写一段代码,我在主函数中的if语句被忽略了。如您所见,此代码接收一些字符串作为输入,并应用凯撒密码。注意:main中调用的函数加密也已定义,我只是不粘贴,因为我认为没有必要,因为问题是,当我询问用户是否要加密或解密文本时,在fgets之后,if语句被完全忽略(在编写“encrypt”后,程序就退出了)。 代码如下:

int main()
{
    char text[SIZE], choice[SIZE];
    printf("\nWelcome to Caesar's Cipher.\nDo you wish to encrypt or decrypt text?\n");
    fgets(choice, SIZE, stdin);
    if (strcmp(choice, "encrypt") == 0)
    { 
        printf("Insert text to encrypt:\n");
        fgets(text, SIZE, stdin);
        ciphering(text);
        printf("\nThis is your text encrypted with Caesar's Cipher:\n%s\n", text);
    }
    return 0;
}

fgets
获取的字符串末尾有一个尾随的
\n
。您需要手动将其删除,或将其与
的“encrypt\n”进行比较
使用此版本的
strcmp()


问题是,
fgets
将换行符与字符串一起存储,因此要仅使用前N个字符进行比较,并将
\N
排除在比较之外,请使用
strncmp
给出要与之比较的字符数。

@Yu Hao谢谢。如果(strncmp(选择,“加密”,7)==0)也起作用。谢谢
if (strncmp(choice, "encrypt", 7) == 0)