【发布时间】:2017-07-02 23:22:46
【问题描述】:
我有一个函数来验证数字是否为整数,然后我尝试将此函数调用到另一个验证数字是否在限制上的函数。首先它不返回值并返回扫描整数,我该如何解决?然后我输入的值很重要,10 总是 iVal。为什么?
printf("Enter an integer between 10 and 20: ");
iVal = getIntLimited(10, 20);
printf("Your entered %d\n", iVal);
void flushKeyboard(void){
char enter;
do{
scanf("%c", &enter);
} while (enter != '\n');
}
int getInt(void){
int value;
char nl;
do{
scanf("%d%c", &value, &nl);
if (nl != '\n'){
flushKeyboard();
printf("Invalid integer, please try again: ");
return value;
}
} while (nl != '\n');
}
int getIntLimited(int lowerLimit, int upperLimit){
int iVal;
getInt() == iVal;
if ((getInt() > lowerLimit) && (getInt() < upperLimit)){
return iVal;
}
else{
printf("Invalid value, %d < value > %d: ", lowerLimit, upperLimit);
printf("\n");
}
}
【问题讨论】:
-
阅读minimal reproducible example 并用一个完整的工作示例更新问题,重现您的问题,并且可以剪切和粘贴以供人们测试。
-
@E.G.你忘了写返回值;在第一个函数中。并且您应该在第二个函数中声明一个变量,以获取第一个函数的返回值。例如 int value = getInt();
-
我试过了,但不起作用。顺便说一句,我忘了提到另一个功能。 void flushKeyboard(void){ char enter; do{ scanf("%c", &enter); } 而(输入!='\n'); }
-
这是未定义的行为。
-
整个
flushKeyboard解决方案很丑,不要使用scanf作为用户输入,使用fgets或fgetc,然后你可以使用sscanf或atoi或strtol解析它。使用fgets时,您不必为“刷新”输入编写变通方法。