如何检查变量是否不正确

时间:2018-07-28 20:47:43

标签: c variables char comparison-operators

基本上,我想检查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的理解允许我创建的代码,但是它无法正常运行,只会循环: 答案不正确,请重试

3 个答案:

答案 0 :(得分:1)

"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");
};

答案 1 :(得分:1)

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

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

条件((a!='y') || (a!='n'))将始终为true,因为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的初始值无关紧要,因为在{{1}的开头读取了新的a值},并且对yesno()所做的任何更改都不会在a中引起任何反响,因为参数是通过值传递的,而main()不会返回值。

因此,您可以将其设置为yesno()的局部变量,如

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')); } 中。

答案 2 :(得分:0)

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

#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部分。