2016-03-22 13 views
-2

Kısa bir lineer arama algoritması oluşturmaya çalışıyorum ama hata mesajı almayı sürdürüyorum kontrol, void olmayan fonksiyonun -retör tipi sonuna ulaşabilir. Hatanın döngü dışında bir getiri koymasıyla ilgili olduğunu biliyorum, ancak dönüş değerini dönüşten nasıl alabilirim o zaman? İşte denetim geçersiz void fonksiyonun sonuna ulaşabilir

kodudur:

bool search(int value, int values[], int n) 
{ 
    for(int i=0; i<values[n]; i++) 
    { 
     if (values[i] == value) 
     { 
      printf("%i was found.", value); 
      return true; 
     } 
     else if (values[i] != value) 
     { 
      printf("%i was not found.", value); 
      return false; 
     } 
     else if (value <= 0) 
     { 
      printf("%i is not a positive number.", value); 
      return false; 
     } 
     else 
      return false; 
    } 
} 
+4

Değerler [n] '0 ise ne döndürülmesi gerekiyor? – ach

+0

Değerleri her bir değerle karşılaştırmak ister misiniz? o zaman neden hemen işlevden dönüyorsunuz? –

+0

iç 'dönüş yanlışı;' muhtemelen çıkarılmalı ve yalnızca bir dış yerleştirilmelidir. – ensc

cevap

4

0<values[n] döngü içinde hiç iterated ve böylece kontrol sonuna geldiğinde ediliyor asla neden olur fonksiyonunun başlangıcında yanlıştır durumda.

Basit çözüm, işlevin sonuna return false; eklemektir.

Bana öyle görünüyor ki, değer ne olursa olsun, döngü sadece bir yineleme olacaktır, bu yüzden kodun istediğini yapmasını istemiyorum. Bunu düşündüğün şey buydu. Döngü dışında kodun nasıl olduğunu görmek için aramadan önce değerlendirilmeli ve arama sonrasında hiçbir şey bulamıyor. Sorunun, kodun kontrol akışını ve dönüş ifadesinin ne yaptığını biraz daha araştırmanız gerektiği açık.

bool search(int value, int values[], int n) 
{ 
    if (value <= 0) 
    { 
     printf("%i is not a positive number.", value); 
     return false; 
    } 

    for(int i=0; i<n; i++) 
    { 
     if (values[i] == value) 
     { 
      printf("%i was found.", value); 
      return true; 
     } 
    } 

    printf("%i was not found.", value); 
    return false; 
}