当满足功能条件时,Printf无法工作

时间:2017-03-28 02:06:25

标签: c function

我编写了一个函数getIntLimited,要求用户输入10到20之间的有效整数,getIntLimited调用函数getInt来确认输入是否是有效整数。如果用户实际输入一个介于10和20之间的有效整数,那么一切都按预期工作。只需要一个空行换行来扫描另一个输入而不是输出printf语句("You entered: %d \n", iVal);我不知道为什么满足条件时,它不会输出printf语句。这是我的代码:

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

//tools
void flushKeyboard(void);
void pause(void);
int getInt(void);
int getIntLimited(int lowerLimit, int upperLimit);
double getDoubleLimited(double lowerLimit, double upperLimit);

//app interface

int main(void){
    flushKeyboard();
    pause();

    int answer;
    printf("Enter an integer: ");
    answer = getInt();
    printf("You entered: %d \n", answer);

    int iVal;
    printf("Enter an integer between 10 and 20: ");
    int lowerLimit = 10;
    int upperLimit = 20;

    iVal = getIntLimited(lowerLimit, upperLimit);
    printf("You entered: %d \n", iVal);

    return 0;
    }


//code your functions here:
void flushKeyboard(void)
{
    int read;

    while (( read = getchar()) != '\n' && read != EOF) {
    continue;
}
    return;
}

void pause(void)
{
    printf("Press <ENTER> to continue...");
    flushKeyboard();
    return;
}

int getInt(void)
{
    int Value;
    char NL = 'x';

    while (scanf("%d%c", &Value, &NL) != 2 || NL != '\n') {
        flushKeyboard();
        printf("Invalid integer, please try again: ");
    }

    return Value;
}


int getIntLimited(int lowerLimit, int upperLimit)
{
    int limit;
do {
    limit = getInt();

    if(lowerLimit > limit || upperLimit < limit) {
        printf("Invalid value, %d < %d < %d: ", lowerLimit, limit,     upperLimit);
    }
}while(lowerLimit <= limit || upperLimit >= limit);
return limit;

}

1 个答案:

答案 0 :(得分:3)

您的do / while条件描述了您实际想要发生的事情的反转:当limit介于lowerLimit和{{1之间时,您希望循环结束}}

在您使用它时,请考虑将变量upperLimit重命名为更具描述性的内容 - 例如limitvalue,因为用户输入的数字不是< / em>用作限制。

条件应为

result