2016-12-09 47 views
-5
#include <stdio.h> 
int main (void) 
{ 
    int phy,geo,i,highest,largest; 
    int arr[2]={phy,geo}; 

    printf("marks for physics : "); 
    scanf("%d",&phy); 

    printf("marks for geo : "); 
    scanf("%d",&geo); 

    largest = arr[0]; 

    for (i = 0; i < 2; i++) { 
     if (arr[i] > largest) { 
      largest = arr[i]; 
     } 
    } 

    // Print out the Result 
    printf("\nLargest Element : %d", largest); 

    return(0); 
} 

我得到的變量'最大'的荒謬值。無論我輸入什麼樣的輸入,始終都是相同的值。其目的是計算兩個輸入數字中最大的數字。爲變量'最大'顯示的荒誕值

+0

「荒謬的價值」請澄清? –

+0

無論我輸入什麼值,我都可以得到值36 @MDXF – user7274921

+5

您在'phy'和'geo'有值之前聲明'arr [2] = {phy,geo};''。 –

回答

1

你正在用未初始化的數字填充你的數組,這就是你的「荒謬值」的來源,然後你把你的輸入放入永遠不會被讀取的變量中,因此你的輸入爲什麼不會改變輸出。

試試這個:

printf("marks for physics : "); 
scanf("%d", &arr[0]); 

printf("marks for geo : "); 
scanf("%d", &arr[1]); 
+1

織補;剛寫完全相同的答案。 –

1

獲得五個空格在內存中充滿了一切在那裏開始:

int phy,geo,i,highest,largest; 

獲取三個內存空間,設置的最後一個爲空(以顯示它是數組的末尾),並將前兩個未初始化空間中的兩個值複製到數組中:

int arr[2]={phy,geo}; 

獲取兩個數字輸入,並將其寫入爲兩個您最初從內存獲得了五個空格的:

printf("marks for physics : "); 
scanf("%d",&phy); 
printf("marks for geo : "); 
scanf("%d",&geo); 

與您從第一個未初始化的空間複製的值的副本填寫在內存中的第五空間在內存中存儲到數組的第一個元素:

largest = arr[0]; 

對於數組中的每個元素(與你剛纔複製的一個開始),如果該元素是比你什麼拷貝到第五空間較大內存,將其複製到內存中的該空間。

for (i = 0; i < 2; i++) { 
    if (arr[i] > largest) { 
    largest = arr[i]; 
    } 
} 

那麼你要做的就是複製在內存未初始化點到一個數組,然後被輸入,並將其寫入到存儲器中的點,然後看着數組中的最大元素。這會給你帶來奇怪的結果,因爲你正在比較程序開始運行時發生在內存中的任何值。

1

的發言

int arr[2]={phy,geo}; 

你基本上是初始化與它們尚未初始化的phygeo當前值的數組。

當您稍後通過scanf加載值時,這些將不會反映在arr中。 你需要修改如下代碼:

printf("marks for physics : "); 
scanf("%d",&phy); 
arr[0] = phy; 

printf("marks for geo : "); 
scanf("%d",&geo); 
arr[1] = geo; 
+0

格式化很難閱讀。內聯代碼塊或'backtics'請縮進4個空格。 – davejagoda

0
int arr[2]={phy,geo}; 

這並不意味着「arr是一個數組任何值phygeo將在未來持有」。

,意思是「arr是陣列的任何值phygeo現在保持」。

而這些值是不確定的,因爲當您創建arr時,phygeo都未被初始化。