2013-04-02 76 views
-1

我被要求編寫一個程序,該程序接受一個數字列表,直到遇到一個非數字(最多30個數字),將這些數字放入一個數組中,並記錄多少個數字被插入。然後它應該掃描數組以找到最大的數字,並打印出最大的數字。數組中的最大值

這是我想出來的:

#include<stdio.h> 
int main() 

{ 
    const int INPUT = 30 ; 
    int size [INPUT]; 
    int i, big; 


    printf("Type integer numbers, followed by q to quit: "); 
    while (scanf("%d", &size[INPUT]) != 'q') 
{ 

    for(i=0;i<size;i++) 
     scanf("%d",&INPUT[i]); 
    big = INPUT[0]; 


    for(i=1;i<size;i++) 

    { 
     if(big<INPUT[i]) 
      big=INPUT[i]; 
    } 

    printf("The largest number is %d",big); 
    return 0; 
} 
+1

1. while循環錯誤; 2.濫用scanf的返回值。 – Sheng

+0

@Shane你能幫我嗎。 – Yvantc

+0

他做到了。看看scanf返回的內容,並評估你的循環標準。 http://stackoverflow.com/questions/10084224/how-do-we-test-the-return-values-from-the-scanf-function – jwrush

回答

1

另外的問題,我在註釋中列出。你似乎被這些可變名稱所充斥〜無論如何,我爲你製作了一些代碼。

#include<stdio.h> 

int main() 
{ 
    const int MAX_INPUT = 30 ; 
    int input[MAX_INPUT]; 
    int size=0, big; 


    printf("Type integer numbers, followed by q to quit: "); 
    while(size < MAX_INPUT){ 
     if(scanf("%d", &input[size]) != 1){ 
      break; 
     } 
     ++size; 
    } 

    if(size ==0){ 
     return 0; 
    } 

    big = input[size-1]; 

    while(size-- > 0) 
    { 
     if(big<input[size]){ 
      big=input[size]; 
     } 
    } 

    printf("The largest number is %d\n",big); 
    return 0; 
} 

使用GCC 4.1.2和Linux進行測試。

+0

非常非常感謝你,現在我將再次研究這一點,並試圖找出如何工作的while循環,所以我可以做到一遍又一遍 – Yvantc

+0

好吧另一個這是當我單獨輸入q而不是退出給我一個值作爲最大值,while循環不循環。 – Yvantc

+0

我的錯。忘記檢查它。我更新了代碼。 – Sheng

0

Return value of scanf

成功完成後,這些函數返回的 號碼匹配成功並分配輸入項目

此外,您正在混合的大小和輸入,你實際上想要的大小是一個常數和輸入是一個數組:

const int SIZE = 30 ; 
int input[SIZE]; 

因此,while循環應該是這樣的:

while (scanf("%d", &input[some_index]) == 1) 

,當然這是錯誤的:

scanf("%d",&INPUT[i]); // should be ==> &input[i] 
+0

但我之所以放q是因爲1st是一個數組,所以我將輸入多個數字,並且我希望它在我輸入q時停止。 – Yvantc

+0

q將停止循環,因爲它無法成功分配給整數。 – perreal