我编写了一个函数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;
}
答案 0 :(得分:3)
您的do
/ while
条件描述了您实际想要发生的事情的反转:当limit
介于lowerLimit
和{{1之间时,您希望循环结束}}
在您使用它时,请考虑将变量upperLimit
重命名为更具描述性的内容 - 例如limit
或value
,因为用户输入的数字不是< / em>用作限制。
条件应为
result