簡體   English   中英

使用不打印值的 int 函數從數組中返回最大數

[英]Returning largest number from an array using an int function not printing value

我正在嘗試創建一個接收數組並從數組中返回最大數字的小程序。 我能夠使用帶有初始化程序“void”的函數創建程序,但不明白為什么我不能使用“int”對不同的函數執行相同的操作。

使用函數int largestNum(int *length,int numberArr[])我收到錯誤“不兼容的指針類型從結果類型為 'int *' 的函數中返回 'int *(int *, int *)'”。 任何解釋表示贊賞。

輸入:
元素 0 - 23
元素 1 - 12
元素 2 - 34

輸出: 34

使用 void 的函數:

void largestNum(int *length,int numberArr[]){

 int largestNumber = numberArr[0];

 for(int x = 1;x < *length;x++){
   if (numberArr[x] > largestNumber)
   largestNumber = numberArr[x];
  }
  printf("%d", largestNumber);
 }


int main(){

 int numbersArr[100];
 int input;
 int num;
 int count = 0;
 
 printf("Input total number of elements (1-100): ");
 scanf("%d", &num);

 for(int x = 0; x < num; x++){
   printf("Element %d - ", count);
   scanf("%d", numbersArr + x);
   count++;
 }


 largestNum(&count, numbersArr);

 return 0;
 }

使用 int 的函數:

int largestNum(int *length,int numberArr[]){

 int largestNumber = numberArr[0];

 for(int x = 1;x < *length;x++){
   if (numberArr[x] > largestNumber)
   largestNumber = numberArr[x];
 }
 return largestNumber;
} 


int main(){

 int numbersArr[100];
 int input;
 int num;
 int count = 0;

 printf("Input total number of elements (1-100): ");
 scanf("%d", &num);

 for(int x = 0; x < num; x++){
   printf("Element %d - ", count);
   scanf("%d", numbersArr + x);
   count++;
 }


  largestNum(&count, numbersArr);

  printf(largestNum);

 return 0;
 }

您需要將該值保存在一個變量中,例如:

a = largestNum(&count, numberArr);
printf("%d", a);

或者你可以只調用 printf 中的函數

printf("%d", largestNum(&count, numberArr))

largestNum是一個函數,聲明如下

int largestNum(int *length,int numberArr[]);

所以在這次通話中

printf(largestNum);

函數指示符被隱式轉換為int( int *, int * )類型的指針,但函數 printf 需要char *類型的第一個參數。 那就是上面的printf調用沒有意義。 您需要輸出函數的返回值。 例如

printf("%d\n", largestNum(&count, numbersArr) );

請注意,一般情況下該功能是錯誤的。 當表達式*length值等於0時,它可以調用未定義的行為。

通過引用傳遞第一個參數也沒有多大意義。 由於數組在函數內沒有改變,所以應該用限定符 const 聲明它。

可以通過以下方式聲明和定義該函數

size_t largestNum( const int numberArr[], size_t n )
{
    size_t largestNumber = 0;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( numberArr[largestNumber] < numberArr[i] )
        {
            largestNumber = i;
        }
    }
    
    return largestNumber;
} 

該函數可以像這樣調用

size_t pos = largestNum( numbersArr, count );
printf("%zu\n", numbersArr[pos] );

當第二個參數被指定為等於 0 時檢查錯誤,你可以寫

size_t pos = largestNum( numbersArr, count );
if ( pos != count ) printf("%zu\n", numbersArr[pos] );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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