将字符与字符串进行比较

时间:2018-11-21 20:14:13

标签: c

我要用C编写一个代码,以使用户输入单词"fantastic"的第一个和最后一个字符。如果他对两个答案都正确,则应打印"Well done",如果他输入错误,则应打印"one of your answers is incorrect",如果他都输入错了,我会告诉他稍后再试。

下面是我尝试的代码,该代码不允许我输入第二个字符,而且答案也有误。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char word[] = "fantastic";
    char in1, in2;
    printf("Please enter the first letter of the word \'fantastic\': ");
    scanf("%c", &in1);
    printf("\nPlease enter the last letter of the word \'fantastic\': ");
    scanf("%c", &in2);
    if (in1 == word[0], in2 == word[8]) {
        printf("\nWell Done!\n");
    }
    else if (in1 == word[0], in2 != word[8], in1 != word[0], in2 == word[8]) {
        printf("\nOne of your answers is incorrect!\n");
    }
    else {
        printf("\nTry again next time!\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

  

我尝试输入的代码不允许我输入第二个字符

之后

scanf("%c", &in1);

在字符仍在输入缓冲区中后输入的换行符('\n')将被

使用
scanf("%c", &in2);

所以您没有机会再输入一个。您可以将两者都更改为

scanf(" %c" // ...
//     ^

跳过前导空白。


  

也得到错误的答案

下一个问题与您的if语句有关:如果在两次相等的测试之间使用逗号运算符,则整个表达式的结果将只是最右边的子表达式:

in1 == word[0], in2 == word[8]

评估为in2 == word[8]。逗号之前的部分对此没有影响。

当您有两个布尔表达式(例如相等性测试)时,必须将它们与逻辑&&)链接,以使整个表达式在{{1}的两侧都为真}是真的:

&&

类似地,如果您希望在in1 == word[0] && in2 == word[8] 的至少一侧为真时整个表达式为真,则应该使用逻辑||)。

因此您的代码应如下所示:

||

根据Fiddling Bits的建议,如果除了检查两个字母之外没有其他用途,则不必为该单词定义一个数组:

if (in1 == word[0] && in2 == word[8]) {
    printf("\nWell Done!\n");
}
else if (in1 == word[0] && in2 != word[8] || in1 != word[0] && in2 == word[8]) {
    printf("\nOne of your answers is incorrect!\n");
}
else {
    printf("\nTry again next time!\n");
}

如果交换订单,则需要较少的比较和逻辑:

char const first = 'f';
char const last  = 'c';

if (in1 == first && in2 == last) {
    printf("\nWell Done!\n");
}
else if (in1 == first && in2 != last || in1 != first && in2 == last) {
    printf("\nOne of your answers is incorrect!\n");
}
else printf("\nTry again next time!\n");

答案 1 :(得分:0)

我尝试了您的建议,并且正在解决 非常感谢..... 以下是有效的最终代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char word[] = "fantastic";
char in1, in2;
printf("Please enter the first letter of the word \'fantastic\':");
scanf(" %c", &in1);
printf("Please enter the last letter of the word \'fantastic\':");
scanf(" %c", &in2);
if (in1 == word[0] && in2 == word[8]) {
printf("\nWell Done!\n");
}
else if (in1 == word[0] && in2 != word[8] || in1 != word[0] && in2 == word[8]) {
printf("\nOne of your answers is incorrect!\n");
}
else {
printf("\nTry again next time!\n");
}
return 0;
}