[Çözüldü]If bloğu problemim var

Başlatan stef_q, 01 Mayıs 2011 - 10:03:15

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

stef_q

Ödevimi teslim etmekle ilgileniyorum. Ama öyle bir yerde takıldım ki, artık derleyici hatası diyecek duruma geldim. Şu if bloğuna bir bakın :

if((a==-1) && (!is_empty(arrival_time, islem_adeti)) );  //burada sadece bir tane & işareti ile de denedim. Sonuç aynı
         {
                 printf("%d", a);
                 printf("BOS");
                 now++;
                 goto yukari;
         }

Bu proramın çok ufak bir kısmı. Programın başka yerinde printf ile değişken ekrana basılmıyor.  İf in içindeki ilk satırdan sürekli 1 değeri dönüyor. Oysa bu imkansız. Çünkü if e girmesi için koşul a nın -1 e eşit olması. -1 i değiştirip başka değer yapıyorum yine printf("%d", a); satırından 1 değeri ekrana basılıyor. Böyle bir şey nasıl mümkün olabilir ?

Programı windowsta Dev c nin son sürümü ve Ubuntuda gcc ile derliyorum aynı çıktıyı iki taraftada alıyorum.

Bir yerde mantık hatası mı yapıyorum ?

Birde konu ile alakası pek yok ama tüm işletim sistemlerinde çalışan bir bekleme fonksiyonu arıyorum . Windowsta sleep(a) sistemi a saniye bekletiyor, bunun tüm işletim sistemlerinde çalışabilecek bir versiyonu yokmudur ?

Şimdiden teşekkürler!

sem

Sondan başlayayım... sleep() fonksiyonu standart bir C fonksiyonudur. Linux Windows ya da herhangi bir sistemde aynı tepkiyi verecektir.

Sorunuz ile ilgili olarak şu kısımdan yorum yapmak biraz zor.

&& operatörü ile denemeniz gerekiyor zaten şu durumu... & operatörü bu şekildeki bir işlemde bitsel karşılaştırma yapacaktır. Yani sizin istediğiniz amaca yönelik bir işlem yapmaz. Ya da tek operandlı ön ek kullanırsanız da adres operatörü olarak kullanılır.

Yani && bunda sorun yok...

Eğer program stdout'a 1 karakteri basıyorsa bu başka bir yerden kaynaklanıyor olabilir.  Dediğim gibi bu kısım ile ilgili bir şey söylemek zor. Fakat burada ekrana basmak istedğiniz a parametresinin değerini ya da BOS yazısını programın şu hali ile zaten göremezsiniz.

Vermiş olduğunuz kod blığundan sonraki bölümlerde ekrana başka yazdırma işlemleri yapılıyorsa "belki" görebilirsiniz buradaki çıktılarınızı... Ya da programın sonlanması gerekir...

printf("%d", a);
printf("BOS\n");

şeklinde yaparsanız, programın hangi aşamada ne çıktığı daha iyi görürsünüz. C stdout'u satır tamponlamalı olarak kullandığı için, yazdıklarınızı görmeniz için ya \n şeklinde satır sonu bildirmeniz gerekir, ya  da  programın sonlanması gerekir. Ya da stdout flush uygulamanız gerekir. C standartlarına göre aslında stdout'a flush uygulanamıyor. Fakat çoğu derleyici kabul ediyor. Bu nedenle taşınabilirlik açısından flush() kullanmamanızı tavsiye ederim.

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

stef_q

if((a==-1) && (!is_empty(arrival_time, islem_adeti)) );

sondaki paranteze noktalı virgül koyarsam olacağı bu tabi :(

Sorun buradan kaynaklanıyormuş...

İlginiz için teşekkür ederim :)