如何检查变量是否不是某物

How to check if variable is NOT something

基本上我想检查 char a 是否不是 'y''n'。已经尝试了一个小时,但找不到任何东西。

#include<stdio.h>
int yesno(char a){
    do{
        printf(":");
        scanf("%s",&a);
        if((a!='y')||(a!='n')){
            printf("Incorrect awnser, try again\n");
        }
    }while((a!='y')||(a!='n'));
}
int main(){
    printf("************************************\n");
    printf("*Welcome to 'noname' 0.01          *\n");
    printf("*Do you want to start y/n?         *\n");
    printf("************************************\n");
    yesno(1);
return 0;
}

有人能告诉我该怎么做吗?如何让它检查某物是否不是某物。 这段代码是我对 C 的理解允许我创建的,但它不能正常工作,它只是循环: 回答错误,重试

"if((a!='y')||(a!='n')){
    printf("Incorrect awnser, try again\n");
}"

您可以使用 switch-case 语句,默认为 printf() 语句。

switch(a) {
    case 'y':
    // do nothing
    break;
    case 'n':
    // do nothing
    break;
    default:
    printf("Incorrect answer, try again\n");
};

如评论中所建议,您应该使用 && 运算符而不是 || 来检查 a 是否既不是 'y' 也不是 'n'

    if((a!='y') && (a!='n')){
        printf("Incorrect awnser, try again\n");
    }
}while((a!='y') && (a!='n'));

条件 ((a!='y') || (a!='n')) 永远为真,因为 a 不能同时为 'y''n'

而在 yesno() 中,a 是一个 char 而不是 char 能够保存字符串的数组。

所以

scanf("%s",&a);

应该是

scanf("%c",&a);

因为 char 的格式说明符是 %c%s 是字符串。

即使 a 是一个 char 数组来存储字符串,scanf() 也应该是

scanf("%s",a);

因为 C 中的数组名称会衰减为指向其基元素的指针。


并且您可以取消 yesno() 的参数,因为 a 的初始值是无关紧要的,因为 a 的新值是在 [= 的开头读入的25=] 并且对 a 所做的任何更改都不会在 main() 中产生任何影响,因为参数是按值传递的,而 yesno() 没有 return 值。

所以,与其将 a 设为参数,不如将其设为 yesno() 的局部变量,例如

void yesno(){//or yesno(void)
    char a;
    do
    {
        printf(":");
        scanf("%c",a);
        if((a!='y') && (a!='n')){
            printf("Incorrect awnser, try again\n");
        }
    }while((a!='y') && (a!='n'));
}

然后这样称呼它

yesno();

main().

您可以在 if 条件中使用 continuebreak 语句。

#include <stdio.h>

int yesno(char a){

    do{

        printf(":");
        scanf("%s",&a);
        if((a=='y')||(a=='n')){
            break;
        }
        else{
            printf("Incorrect answer, try again\n");
            continue;           
        }

    }while((a!='y')||(a!='n'));
}

int main(){

    printf("************************************\n");
    printf("*Welcome to 'noname' 0.01          *\n");
    printf("*Do you want to start y/n?         *\n");
    printf("************************************\n");
    yesno(1);

return 0;
}

我只是更改了 if 条件并添加了 else 部分。