2016-03-29 11 views
-4

, şu şekilde değiştirildi: Bu kod bana doğru bakarC Programm çıkışı tamamen nedeniyle bir dizi için en yüksek bitişik değerini belirler Burada bu C programı kodu var ilgisiz, boş printf ifadesinde

#include <stdio.h> 

int inputs[8]; 
int calcSum(int i, int j); 

int main(void) { 
     int i, j, maxSum = 0, tempSum = 0; 
     int length = sizeof(inputs)/sizeof(inputs[0]); 
     for(i=0;i<length;i++) { 
       scanf("%d", &inputs[i]); 
     } 
     for(i=0;i<length;i++) { 
       for(j=i;j<length;j++) { 
         tempSum = calcSum(i,j); 
         if(tempSum > maxSum) { 
           maxSum = tempSum; 
         } 
       } 
     } 
     printf("%d\n", maxSum); 
     return 0; 
} 

int calcSum(int i, int j) { 
     int c, sum; 
     for(c=i;c<=j;c++) { 
       sum+=inputs[c]; 
     } 
     return sum; 
} 

olsa da, yanlış bir sonuç verir. tempSum = ... ve if(tempSum >...) arasındaki her türlü printf("") (boş olabilir) ekleyerek örnekleme, tüm test durumları için kod çıktısını doğru cevabı yapacaktır. Tüm kodu sıfırdan yeniden yazdım ve hala aynı sorunu aldım. Örneğin, sayı dizisi: 5 2 -1 -2 -4 3 5 -6, çıktı olarak 8, printf("") eklendiğinde yapar, aksi halde 38 ... çıktı ve neden olduğunu bilmiyorum. Nerede yanlış gittiğimi açıklayabilir misiniz? Bu kodda

+0

Olası yinelenen: [Nasıl bir programın bir ad, diğer şeyler arasında, Bu sonucu etkiler misiniz?] (http://stackoverflow.com/questions/36184965/how-can-a-name-of-a-program-among-other-things-affect-this-result#comment60005389_36184965) –

cevap

7

:

int calcSum(int i, int j) { 
    int c, sum; 
    for(c=i;c<=j;c++) { 
      sum+=inputs[c]; 
    } 
    return sum; 
} 

Sen bir başlangıç ​​değerine sum başlatmak emin olmak gerekir:

int calcSum(int i, int j) { 
    int c, sum; 
    sum=0; 
    for(c=i;c<=j;c++) { 
      sum+=inputs[c]; 
    } 
    return sum; 
} 
+1

Tam olarak. Uninitialized local variable => undefined behavior => herhangi bir şey eklemek açıklanamaz sonuçlar verebilir. – jdarthenay

+0

Tanımlanmamış davranış, henüz belirlenmemiş değer. Program hiçbir problem olmadan derlenecek ve çalışacaktır (anlamsız sonuçtan başka). –

+0

Çok teşekkürler! Dikkatsiz bir hataya kolay çözüm. – zero