çift parametreli do-while mi olur?

Başlatan Gökhan BEKEN, 08 Eylül 2015, 01:09:28

Gökhan BEKEN

Kod şu şekilde ve kodu ben yazmadım, yazan kişinin bunu neden yazdığından daha çok, derleyicinin neden hata vermediğine şaşırdım.
İlk defa böyle bir kullanım görüyorum...
Özel mesaj okumuyorum, lütfen göndermeyin.

z

Do while yazarsan dantel içi en azından bir kez çalışır.
while satırında şart sağlanıyorsa döngüye devam edilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Gökhan BEKEN

Hocam biliyorum da kodda:
do{
.
.
.
}while (TEMP,7==1);

yazıyor, ben hiç bir şey anlamadım.
Özel mesaj okumuyorum, lütfen göndermeyin.

sovalye

#3
hocam sadece do-while değil, while ve for da olur. Hatta 23 parametreli( parametre değil ama) bile olur. Orada sadece sonuncu sıradaki mantıksal ifadeye bakıyor kalanının doğre veya yanlış olması hiçbir şey ifade etmiyor. Yani while içine girmeden önce yaptıralacak tüm işleri bakılacak mantıksal ifadeden önce virgülle ayırıp yazabilirsiniz.
misal :
int sayi=0;
	while (0,0,printf("b\n"),scanf("%d",&sayi),sayi+=2,sayi<5) {
		printf("a\n");
		printf("%d", sayi);
		break;
	}

kod ekrana b harfi basıp daha sonra kullanıcadan sayı alıp, sayı (5-2) den daha küçük ise a harfi basıp, aldığı sayının iki fazlasını ekrana basıyor.

// renklendirmeyi düzeltemeyince c++ ı c koduna çevirdim.

Gökhan BEKEN

Soldaki 0,0 ne işe yarar? 0 yerine başka bir sayı gelse ne olur? Bunları deneye deneye öğrenmeye çalışacağım. Her zaman en sağdakini mi şart olarak kontrol ediyor?
Detaylarını nerden öğrenebilirim? İnternetten aradım hiç böyle bir şey göremedim.
Özel mesaj okumuyorum, lütfen göndermeyin.

sovalye

#5
soldaki sıfırları öylesine koydum(zaten sıfır dışındaki her sayı c için mantıksal doğrudur.). Amacım herhangi bir mantıksal sınama gerçekleştirilmediğini göstermekti. Çünkü printf de aslında bir sınama yani ekrana basmayı başarırsa 1 dönüyor.
Örnek: printf("a %d", printf("b_")); ekrana "b_a 1" yazdırır.

Evet. Sınama için her zaman en sağdaki ifadeye bakıyor.

Detayları nerden öğrenebileceğiniz konusunda bir fikrim yok. Kurcalayarak öğrenirsiniz. C gerçekten çok ilginç bu konularda özellikle pointer larla ve hazır tamınlı fonksiyonları zorlayınca insanı çok şaşırtıyor.

RaMu

do{
.
.
.
}
while (TEMP,7==1);

TEMP değişkeninin 7. biti 1 olduğu müddetçe
do döngüsünü işle.

Bana gayet normal geldi.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

quarko

(TEMP,7==1)
ifadesi muhtemelen bir makro içeriyordur. Kodu aldığınız yerde bir header dosyası/dosyaları varsa, bir göz atın bakalım.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

CoşkuN

#8
Hangi derleyicide çalışıyorsun, ANSI C mi derleyici?
ANSI C'de böyle birşey yok diye biliyorum, şurada standart dökümanı var, 135. sayfada for, while döngü ifadelerinin kullanımı anlatılıyor:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
İki ifade arka arkaya işletilebilir belki ama orada TEMP tek başına kullanılmış, bir işlem de yapılmıyor.

Gökhan BEKEN

@RaMu bu dediğin bana anlamsız geldi, biraz açıklar mısın?

Alıntı yapılan: quarko - 08 Eylül 2015, 08:24:20
(TEMP,7==1)
ifadesi muhtemelen bir makro içeriyordur. Kodu aldığınız yerde bir header dosyası/dosyaları varsa, bir göz atın bakalım.
TEMP bir makro değil, unsigned char tipinde bir değişken.

Alıntı yapılan: CoşkuN - 08 Eylül 2015, 09:10:56
Hangi derleyicide çalışıyorsun, ANSI C mi derleyici?
Hi-tech için yazılmış bir programı xc8'e aktarıyorum.
Özel mesaj okumuyorum, lütfen göndermeyin.

mufitsozen

#10
Alıntı yapılan: quarko - 08 Eylül 2015, 08:24:20
(TEMP,7==1)
ifadesi muhtemelen bir makro içeriyordur. Kodu aldığınız yerde bir header dosyası/dosyaları varsa, bir göz atın bakalım.

"while" bir preprocessor makrosu yapilmismi diye bakiniz. Buyuk ihtimalle programi yazan cinlik yaparak birbiri ardina gelecek mantiksal onermeleri daha okunakli yapmak icin boyle bir yontem bulmus. (bence cok tehlikeli ve hicbir sartda boyle seyler yapilmamasi lazim)

Aslinda bircok derleyicide preprocessor ciktisi listing dosyasinda gorulur. Derleyiciye esas kaynak programi buradan gorebilirsiniz.

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Icarus

Alıntı yapılan: mufitsozen - 08 Eylül 2015, 10:57:04
"while" bir preprocessor makrosu yapilmismi diye bakiniz. Buyuk ihtimalle programi yazan cinlik yaparak birbiri ardina gelecek mantiksal onermeleri daha okunakli yapmak icin boyle bir yontem bulmus. (bence cok tehlikeli ve hicbir sartda boyle seyler yapilmamasi lazim)
#define TRUE 0
#define FALSE 1
#define , (
#define = !=
:P :P :P

z

#12
do{
       ....
    } while (TEMP,7==1)

Keil bu satıra warning veriyor.

Benzeri kodları derlediğimde sadece sondaki karşılaştırma işlemine baktığını gördüm.

Örnekte sadece 7, 1'e eşit mi değil mi ona bakıyor.

Belki C++'da  Temp,7'nin bir anlamı vardır. Aksi halde C açısından 7==1 her zaman yanlış olacağından verilen döngü anlamsız oluyor.

mesaj birleştirme:: 08 Eylül 2015, 10:43:55

Bide burda do parantezi anlamsız olmuş amaç döngü kurmak değilki.



while öncesi satırlar 1 kez işletilecek ve while satırında busy durumu ortadan kalkıncaya kadar beklenecek.
Bunun için do while bloğu yazmaya gerek yokki.

Bu kodu yazan bence acemi.

Kodları nerden aldın oraya bir bakalım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

Alıntı yapılan: Gökhan BEKEN - 08 Eylül 2015, 10:40:22
@RaMu bu dediğin bana anlamsız geldi, biraz açıklar mısın?

Temp adındaki değişkenin bitlerine tek tek erişmek için bu yolu kullanmış,
ekstra bir şey tanımlamadan direk kullanabilmiş,
demekki ASM deki gibi hi-tech dede bu kullanılabiliyor.
ASM de Temp diye bir değişken tanımlayınca
BTFSS Temp,7  ;Temp değişkeninin 7. biti Set(1) mi? (Bit Test File-register- Skip if Set)
    ;hayır
    ;evet

şeklinde kullanabilirsin.

Bu while satırının asm çıktısana bakarsan
büyük ihtimalle  (TEMP değişkeni derleyici tarafından 0x35 ram adresi olarak tanımlanmış olsun )
BTFSC  0x35,7
GOTO   .......   ;do nun başına git
;do while dan sonra yapılacak işlemi yap, return olabilir.



Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Kodları nerden aldığını yazmayacakmısın?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com