簡體   English   中英

我正在創建一個程序,該程序需要用戶輸入五次,並使用另一個功能來顯示最大的輸入

[英]I'm creating a program that take five input from user and display the largest by using another function

我創建了一個程序,該程序使用int類型的數組從用戶處獲取輸入,並且我想使用用戶定義函數來顯示數組中最大的元素,問題是我通過函數傳遞了數組,但是它沒有告訴我最大的因素

#include <stdio.h>
#define size 5
void get_max(int list[size]);
int main()
{
    int list[size];
    printf("Enter five numbers : ");
    int i;
    for (i=0;i<5;i++)
    {
        scanf("%d",&list[i]);
    }
    printf("\n");
    for(i=0;i<5;i++)
    {
        printf("Element in array list[%d] = %d\n",i,list[i]);
    }
    get_max(list[size]);
}

void get_max(int list[size])
{
    int large,i;
    for (i=0;i<5;i++)
    {
        if(large < list[size])
        {
            large=list[size];
        }

    }
    printf("\nLargest element in array list  %d",large);
}


我想在獲得用戶的輸入后在元素中打印最大值,

謝謝

您的代碼中主要有三個錯誤。

  1. 您正在使用get_max(list[size]);調用該函數get_max(list[size]); 代替get_max(list); 當將list[size]用作參數時,它指向第6個元素(list [5]數組索引從0開始-size-1)。 因此,本身就有兩個錯誤。 沒有第六個元素,數組將超出范圍,這可能會導致不確定的行為。 同樣,即使您要使用list[4]也存在邏輯錯誤,即您正在傳遞數組最后一個元素的地址。 因此,它肯定會超出范圍,並導致函數內部發生未定義的行為。 get_max(list); 是正確的方法。

  2. 您已經在get_max()函數中使用了large=list[size]get_max()函數將創建未定義的行為,如第一點所述。(數組索引從0開始,即0-(size-1)是有效的訪問)。
    例如: if(large < list[size])具有未定義的行為。 它應該在程序中list[i] 您必須遍歷所有數組元素以找到最大數量。

  3. 變量large是不確定的。 您應該在if(large < list[size])之前設置它,否則可能導致應用程序中的行為不確定。 因此,設置large=list[0]

另一個提示是,當您嘗試查找最大(或最小)數字時,應按以下代碼所示設置large=list[0] (或輸入數組中的任何元素)。 否則,如果您最初設置large=0 ,並且所有輸入數字均為負,則程序將輸出錯誤的結果。

修復上述錯誤將使您的代碼運行。 見下文:

#include <stdio.h>
#define size 5
void get_max(int list[size]);
int main()
{
    int list[size];
    printf("Enter five numbers : ");
    int i;
    for (i=0;i<5;i++)
    {
        scanf("%d",&list[i]);
    }
    printf("\n");
    for(i=0;i<5;i++)
    {
        printf("Element in array list[%d] = %d\n",i,list[i]);
    }
    get_max(list);
}

void get_max(int list[size])
{
    int large,i;
    large=list[0];
    for (i=1;i<5;i++)
    {
        if(large < list[i])
        {
            large=list[i];
        }

    }
    printf("\nLargest element in array list  %d",large);
}
  1. large未初始化,將具有不確定的值,這會影響您的計算結果。

  2. 訪問list[size]是未定義的行為,可能您的意思是list[i]

    void get_max(int list[size])
    {
        int large = 0,i = 0;
        for (i=0;i<5;i++)
        {
            if(large < list[i])
            {
                large=list[i];
            }

        }
        printf("\nLargest element in array list  %d",large);
    }

當您調用get_max ...作為參數時,您只需要放置list,而不是list [size] ... An

暫無
暫無

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

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