C hakkında bir soru

Başlatan Mtntk, 23 Haziran 2012 - 15:55:11

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

Mtntk

İyi günler ben okul başlamadan ön hazırlık olsun diye C öğreniyorum kitaptan. Fakat yazdığım bi programda anlamadığım bir hata çıktı. Muhtemelen bir yeri atlıyorum ama tam neresi ben fark edemedim..
#include <stdio.h>

int main(void)
{
float ar, ai, f;
printf("Please give focal length and distance from lens\n");
printf("If object in infinite write -1\n");
scanf("%f %f", &f, &ar);
if ( !(ar == 0) && !(f == 0))
{
if ( ar == -1)
printf("Distance from image to lens equals to %f", f);
else if (ar == f)
printf("Distance from image to lens equals to infinite");
else
ai = ar*f / (ar-f);
printf("Distance from image to lens equals to %f", ai);
}
return 0;
}

Program bu ama ben cismin uzaklığını sonsuz(-1) ya da odak noktası(f) olarak gösterdiğimde en sondaki else bloğu da çalışıyor, çalışmaması gerekmiyo mu o sondaki else bloğunun  atladığım yer neresi acaba?
Sondaki else yi else if ( !(ar == f) && !( ar == -1)) olarak değiştirmeyi denedim yine sonuç aynı..
Çıktı şu şekilde oluyor(ar=5, f=5 değerleri için)
Distance from image to lens equals to infiniteDistance from image to lens equals to -0.000014
Son olarak geany kullanıyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Haziran 2012 - 16:11:23

Son else bloğuna köşeli parantez koyunca düzeldi fakat hala neden çalıştırıyo onları tam çözemedim.

travego0403

Bir şarta bağlı olarak çalıştırmak istediğiniz kodlar bir satır ise(daha doğrusu bir deyim ise) köşeli paranteze almanıza gerek yoktur. Birden fazla satır ise bunları kıvrık parantez içerisine almanız gerekir. Örneğin ilk if kontrolünüzde nasıl kıvrık parantez kullandıysanız else bloğunda da kullanmanız gerekir. Aksi durumda derleyici sadece şarttan sonraki ilk satırı şartın bloğu kabul eder. Örneğin sizin en sondaki printf ifadesi her zaman çalıştırılacaktır çünkü onun üstündeki satır else'ye aittir. Bu satırı da else'ye dahil etmek istiyorsanız kıvrık(süslü) parantez kullanmanız gerekir.

Kodları girintili yazmanızın derleyici için bir önemi yoktur. Girintili yazmak kodu yazan veya daha sonradan koda bakacak olan kişiler için daha anlaşılır olması içindir.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

Mtntk

Dediğiniz gibi else bloğunu paranteze alınca düzeldi ama benim hala anlayamadığım ai değerini neden -0.000014 e eşitliyo ? Çünkü else bloğu çalışmıyo ve ai değişkenine daha hiç bir değer atanmamış durumda..

alquirel

Eğer değişkenlerinizi global değil de bir fonksiyonun içinde tanımlarsanız, değişken o an yerleştirildiği hafıza bölgesindeki bit değerlerine göre değer alır, ki bu da çoğu zaman alakasız bir değerdir.

Eğer harici bir şekilde, yani main fonksiyonunun dışında global olarak tanımlarsanız, bu tanımlama değişkenin yerleştirildiği hafıza bölümünü sıfırlayacaktır.

Mtntk

Teşekkürler cevaplarınız için.