[英]Calling a function into an other function in C
我有一個函數要驗證數字是否為整數,然后嘗試將此函數調用給另一個函數,以驗證數字是否在限制范圍內。 首先,它不返回值,而是返回掃描整數,我該如何解決? 然后輸入的值確實很重要,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");
}
}
正如來自莫斯科的Vlad所指出的那樣,您需要將輸入分配給變量並將其返回。
您的getInt()
函數應類似於:
int getInt(){
int value;
char nl;
do{
scanf("%d%c", &value, &nl);
if (nl != '\n'){
flushKeyboard();
printf("Invalid integer, please try again: ");
}
}while (nl != '\n');
return value; //now you're returning the last scanned valid value!
}
另外,您要三遍調用getInt()
函數:
1)當您“輸入” getIntLimited()
函數時。
2)當您測試getInt() > lowerLimit
3)當您測試getInt() < upperLimit
由於參數lowerLimit
和upperLimit
已經傳遞給函數getIntLimited(int lowerLimit, int upperLimit)
你不需要得到一個值他們。 因此,我將您的getIntLimited(int lowerLimit, int upperLimit)
函數更改為:
int getIntLimited(int lowerLimit, int upperLimit){
int value;
value = getInt(); //assign the input value to a variable
if(value > lowerLimit && value < upperLimit){
return value; //now you're returning the value that you got on getInt()
}
else{
printf("Invalid value, %d < %d > %d: ", lowerLimit, value, upperLimit);
printf("\n");
}
return value; //now you're able to check for this value on the first printf: printf("Your entered %d\n", iVal);
}
希望這種方式為您工作
void flushKeyboard(void){
char enter;
do{
scanf("%c", &enter);
} while (enter != '\n');
}
int getInt(void){
int value;
scanf("%d", &value);
return value;
}
int getIntLimited(int lowerLimit, int upperLimit){
int iVal;
iVal = getInt();
printf(" %d \n", iVal);
if ( ( iVal > lowerLimit ) && ( iVal < upperLimit )){
printf("OK in bound\n");
return iVal;
}
else{
printf("Invalid value, %d < value > %d: ", lowerLimit, upperLimit);
printf("\n");
exit(0);
}
}
int main()
{
printf("Enter an integer between 10 and 20: ");
int iVal = getIntLimited(10, 20);
printf("Your entered %d\n", iVal);
}
您還可以使用沃茲(以上職務) getInt()
和代碼的功能不會改變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.