在运行完这两个函数一次之后,do while循环将继续跳转到while条件并直接转到getInt函数,然后getInt函数将陷入
scanf("%d,%c", &Value, &NL)
直到输入一个字符(或类似于office的单词)。这将再发生3次,直到第四个“无效整数”消息出现,然后“超出范围”消息将显示,只会使who进程再次发生。不确定是do-while循环不起作用,还是if statements不起作用。
当用一个词(即office)测试函数时,getInt将声明值为“无效整数”,当用值99或501测试时,getIntInRange应声明值为“超出范围”,但是,在5次迭代之后,getIntInRange函数将只显示“超出范围”消息(如果在值和字符之间交替,则“超出范围”第四次尝试输入值后将显示消息

// getInt function definition goes here:
int getInt(void) {
    int Value = 0;
    char NL = "";

    do {
        scanf("%d%c", &Value, &NL);
        if (NL != '\n') {
            clearKeyboard();
            printf("*** INVALID INTEGER *** <Please enter an integer>: ");
        } else {
        };
    } while (NL != '\n');

    return Value;
}

// getIntInRange function definition goes here:
int getIntInRange(int lowerBound, int upperBound) {
    do {
        //getInt();
        if (getInt() < lowerBound | getInt() > upperBound) {
            printf("*** OUT OF RANGE *** <Enter a number between %d and %d>: ", lowerBound, upperBound);
        } else {
            continue;
        };
    } while (getInt() < lowerBound | getInt() > upperBound);

    return getInt();
}

我的getIntInRange函数假设从getInt函数接收一个值(getInt检查输入的值是否为整数),并将这些值与下边界(在不同的源代码中设置为100)和上边界(在不同的源代码中设置为500)进行比较。如果值超出范围,则将显示错误消息。

最佳答案

您的代码有多个错误:
char NL = "";不正确:char是字符,""是字符串。
scanf("%d%c", &Value, &NL);不是可靠地测试正确输入的方法,您应该测试scanf()的返回值:if (scanf("%d", &Value) != 1) { /* invalid input */ }
不应多次调用getInt(),该值必须存储在变量中,并且应测试该变量,否则将丢失值输入。
在再次调用scanf()之前,您应该先使用有问题的输入。
您应该检查文件结尾以避免无限循环。
您应该使用||&&进行逻辑测试,|用于位操作。
避免do/while循环,它们是众所周知的混乱和易于编程错误。
以下是更正版本:

#include <stdio.h>
#include <stdlib.h>

int clearInput(void) {
    int c;
    while ((c = getchar() != EOF && c != '\n')
        continue;
    return c;
}

int getInt(void) {
    int value = 0;

    while (scanf("%d", &value) != 1) {
         if (clearInput() == EOF) {
             printf("unexpected end of file\n");
             exit(1);
         }
         printf("not an integer, try again\n");
    }
    return value;
}

int getIntInRange(int lowerBound, int upperBound) {
    for (;;) {
        int value = getInt();
        if (value >= lowerBound && value <= upperBound)
            return value;
        printf("*** OUT OF RANGE *** <Enter a number between %d and %d>: ", lowerBound, upperBound);
    }
}

关于c - 被跳过时执行或If语句不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55348817/

10-11 19:00