首页 > 解决方案 > 下面的代码应该接受初始输入,并且应该继续要求输入,直到两个输入都从 0 到 2000

问题描述

下面的代码应该接受初始输入,并且应该继续询问输入,直到两个输入都从 0 到 2000,但只询问两者是否小于 0 或大于 2000

int main(){

    float x;
    int y;
    scanf("%f",&x);
    scanf("%d",&y);
while(!(x>0 && x<=2000) && !(y>0 && y<=2000)){
    printf("invalid balance or initial amount\n");
    printf("enter initial balance\n");
    scanf("%f",&x);
    printf("enter withdrawal amount\n");
    scanf("%d",&y);
    continue;
     }
return 0;

}

标签: cloopswhile-looplogiccontinue

解决方案


简单的答案:将中间更改&&||

while (!(x>0 && x<=2000) || !(y>0 && y<=2000)) {

或者,您可以使用等效的:

while (! ((x>0 && x<=2000) && (y>0 && y<=2000))) {

但是,我会清理一下,因为初始 scanf调用 [在循环之前] 不会提示用户。所以,我稍微颠倒一下逻辑:

#include <stdio.h>

int
main(void)
{
    float x;
    int y;

    while (1) {
        printf("enter initial balance\n");
        scanf("%f", &x);

        printf("enter withdrawal amount\n");
        scanf("%d", &y);

        if (((x > 0) && (x <= 2000)) && ((y > 0) && (y <= 2000)))
            break;

        printf("invalid balance or initial amount\n");
    }

    printf("x=%g y=%d\n",x,y);

    return 0;
}

推荐阅读