C语言 我如何只允许对这个问题回答是或否

92vpleto  于 2023-02-07  发布在  其他
关注(0)|答案(3)|浏览(138)

我尝试只允许yesno,如果答案是其他字母的数字,则退出问题。我应该如何添加它?

#include <stdio.h>

int main(void) {

    char answer;
    scanf("%c", &answer);
    if (answer == 'y') {
        printf("You Entered: 'y'\n");
        printf("\n");
        printf("your turn\n");
        printf("\n");
    }
    else if (answer == 'n') {
        printf("You Entered: 'n'");
        printf("\n");
        printf("other's turn\n");
        printf("\n");
    }
    else (answer != 'y' && answer != 'n'); {
        if (answer == '%d') {
            printf("You Entered:  '%d'\n", answer);
            printf("You did not enter 'y' or 'n', program now exiting... \n");
    
            if (answer <= 'A' || answer <='a') {
                printf("You Entered:  '%c'\n", answer);
                printf("You did not enter 'y' or 'n', program now exiting... \n");  
    
            }
        }
    return 0;
}
nfeuvbwi

nfeuvbwi1#

您已经创建了一个if块,它将检查条件
answer == 'y'
则在此之后存在else if
else if(answer == 'n')
如果不满足前一条if语句的条件,则执行,根据您设置的条件执行AND,在本例中:
answer == 'n'
现在,如果你想在每次用户输入不同于这两个值的任何内容时抛出一个错误,那么没有比这个更简单的解决方案了:发出else语句。
else语句在前面所有其他ifelse if未执行时执行。
最终代码可能如下所示:

#include <stdio.h>

int main(void) {
    char answer;
    scanf("%c", &answer);
    
    if(answer == 'y') {
        printf("You Entered: 'y'\n");
        printf("your turn\n\n");
    }
    else if(answer == 'n') {
        printf("You Entered: 'n'\n");
        printf("other's turn\n\n");
    }
    else {
        printf("You entered neither 'y' nor 'n', program will now exit...\n");
    }
    
    return 0;
}
lzfw57am

lzfw57am2#

您的代码有两个问题:
1.您在代码的最后缺少一个括号,并且还有其他一些小错误。

  1. if (answer == '%d')此比较无效。
    %d是一个格式说明符,因此它不能存储任何值。
    更正代码后,它应如下所示:
#include <stdio.h>

int main(void) {

    char answer;
    scanf("%c", &answer);

    if (answer == 'y') {
        printf("You Entered: 'y'\n");
        printf("\n");
        printf("your turn\n");
        printf("\n");
    }
    else if (answer == 'n') {
        printf("You Entered: 'n'");
        printf("\n");
        printf("other's turn\n");
        printf("\n");
    }
    else if (answer != 'y' && answer != 'n') {
        printf("You Entered:  '%d'\n", answer);
        printf("You did not enter 'y' or 'n', program now exiting... \n");
    }
    return 0;
}

希望这对你有帮助。

67up9zun

67up9zun3#

  • 一个 * 解决方案是将 checkout 拆分为一个单独的函数,该函数可以读入字符,并根据读取的字符是'y'还是'n'返回truefalse

然后,可以在main中检查该返回,并相应地执行操作。
在这种情况下,如果get_yes_or_no返回false,则不带else的条件将充当哨兵,通过返回1来阻止控制流继续。

#include <stdio.h>
#include <stdbool.h>

bool get_yes_or_no(char *ch) {
    if (scanf("%c", ch) == 1 && (*ch == 'y' || *ch == 'n')) 
        return true;

    return false;   
}

int main(void) {
    char answer;

    if (!get_yes_or_no(&answer)) {
        printf("You Entered:  '%d'\n", answer);
        printf("You did not enter 'y' or 'n', program now exiting... \n");
        return 1;
    }

    if (answer == 'y') {
        printf("You Entered: 'y'\n");
        printf("\n");
        printf("your turn\n");
        printf("\n");
    }
    else {
        printf("You Entered: 'n'");
        printf("\n");
        printf("other's turn\n");
        printf("\n");
    }

    return 0;
}

相关问题