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