执行while循环,计算两个if和elseif语句。一个不考虑输入。(C)

执行while循环,计算两个if和elseif语句。一个不考虑输入。(C),c,if-statement,do-while,C,If Statement,Do While,下面是我的代码,基本上,只要if或elseif语句的计算结果为true,我就试图让do-while循环运行。但每次我运行它时,它都会工作,除了它总是打印2 else if语句“您输入的值小于1”,而不管用户输入如何。我完全不明白它为什么错了 int get_input(void){ int Value_1; int status; do{ //Ask user to enter an odd number between 1 and 9

下面是我的代码,基本上,只要if或elseif语句的计算结果为true,我就试图让do-while循环运行。但每次我运行它时,它都会工作,除了它总是打印2 else if语句“您输入的值小于1”,而不管用户输入如何。我完全不明白它为什么错了

int get_input(void){

    int Value_1;
    int status;
    do{

        //Ask user to enter an odd number between 1 and 9
        printf("Enter any odd number between 1 and 9 inclusive> \n");
        //Store entered number in Value_1

        status = scanf(" %d", &Value_1);
        is_valid(Value_1);
  }
    while (is_valid()!=1);
    return(Value_1);
}

int is_valid(int status){

    if(status==2 || status==4 || status==6|| status==8){

        printf("The value you entered is not odd>\n");
        return(0);
    }
    else if(status > 9){
        printf("the value you entered is greater than 9> \n");
        return(0);
}
    else if(status < 1){
        printf("the value you entered is less than 1> \n");
        return(0);
}
    else{
        return(1);
    }
}

int main(void){


    int Value_1;
    int status;


    Value_1=get_input();
    printf("%d", Value_1);
  return(0);
}
int get_输入(无效){
int值_1;
智力状态;
做{
//要求用户输入一个介于1和9之间的奇数
printf(“输入1到9之间的任意奇数>\n”);
//将输入的数字存储在值_1中
状态=扫描频率(“%d”和值_1);
是有效的(值为1);
}
while(is_valid()!=1);
返回值(值_1);
}
int是有效的(int状态){
如果(状态==2 | |状态==4 | |状态==6 | |状态==8){
printf(“您输入的值不是奇数>\n”);
返回(0);
}
否则,如果(状态>9){
printf(“您输入的值大于9>\n”);
返回(0);
}
否则如果(状态<1){
printf(“您输入的值小于1>\n”);
返回(0);
}
否则{
申报表(1);
}
}
内部主(空){
int值_1;
智力状态;
值_1=获取_输入();
printf(“%d”,值为1);
返回(0);
}
删除此

is_valid(Value_1);
改变

while (is_valid()!=1);


您遇到的问题是,在while中,
is\u valid()
没有任何参数,这导致了错误。

在while语句中,您调用的函数没有参数。那样做 像这样

 while (is_valid(value_1)!=1);
移除块内的调用。因为您要调用同一个函数两次。这就是它打印两次的原因

然后做函数的函数原型,在这之前

int is_valid(int status);
int get_input(void){
 ...
 ...
}
编译器不知道函数是如何定义的。如果你放置这个,你会得到这个错误

too few arguments to function ‘is_valid’
替换

do{

        //Ask user to enter an odd number between 1 and 9
        printf("Enter any odd number between 1 and 9 inclusive> \n");
        //Store entered number in Value_1

        status = scanf(" %d", &Value_1);
        is_valid(Value_1);
  }
  while (is_valid()!=1);

你确定你的代码可以编译吗?您正在调用一个带有无参数参数的参数的函数。
do{

        //Ask user to enter an odd number between 1 and 9
        printf("Enter any odd number between 1 and 9 inclusive> \n");
        //Store entered number in Value_1

        status = scanf(" %d", &Value_1);
        is_valid(Value_1);
  }
  while (is_valid()!=1);
do{

        //Ask user to enter an odd number between 1 and 9
        printf("Enter any odd number between 1 and 9 inclusive> \n");
        //Store entered number in Value_1

        scanf(" %d", &Value_1);
       status =  is_valid(Value_1);
  }
    while (status!=1);