簡體   English   中英

在C中將一個函數調用到另一個函數中

[英]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

由於參數lowerLimitupperLimit已經傳遞給函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM