我要用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;
}
答案 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;
}