C De Switch Case Yardım
-
wasd bunu yazdı
eof karakteri eof yazmak değil ctrl ve z tuşlarına aynı anda bastığında çıkan "^Z" dir. Soruna da bakıyorum şimdi.
Edit: her case ++Say; ve break; diye 2 satırlık işlem yapıyo. Bu satırları {} içine almadığından olabilirmi?
ekleme: aynen int değişkende char tutuyosun :D
charla ne alakası var amk götünden sallamışsın karşim..
-
SARI bunu yazdıwasd bunu yazdı
eof karakteri eof yazmak değil ctrl ve z tuşlarına aynı anda bastığında çıkan "^Z" dir. Soruna da bakıyorum şimdi.
Edit: her case ++Say; ve break; diye 2 satırlık işlem yapıyo. Bu satırları {} içine almadığından olabilirmi?
ekleme: aynen int değişkende char tutuyosun :D
charla ne alakası var amk götünden sallamışsın karşim..
amk int yüzünden demedimki harf değeri int değişkende tutmak saçma sadece o kadar :F
-
Konu ile uzaktan alakalı olarak: Giriş akımlarını fflush ile temizlemek hatalıdır (stdin de bir giriş akımıdır). fflush işlevi çıkış akımlarında kullanılmalıdır.
getch işlevinin de int döndürdüğünü hatırlıyorum. Bir karakter char'dan daha büyük boyuttaki veri tipleri ile de tutmakta sakınca yok:)
YeniHarman tarafından 15/Oca/13 01:31 tarihinde düzenlenmiştir -
YeniHarman bunu yazdı
Konu ile uzaktan alakalı olarak: Giriş akımlarını fflush ile temizlemek hatalıdır (stdin de bir giriş akımıdır). fflush işlevi çıkış akımlarında kullanılmalıdır.
getch işlevinin de int döndürdüğünü hatırlıyorum. Bir karakter char'dan daha büyük boyuttaki veri tipleri ile de tutmakta sakınca yok:)
çok fazla bilgi sahibi değilim, tabiki bilgisayar açısından sakınca yok ama "int puan" demek sayı tutmak için kullanılıyor fikri yaratır insanda, kodun satır sayısı arttıkça kafa karıştırır, "char not" olarak kullanmak hem kafa karışmasını engeller hem az da olsa bellekten tasarruf ettirir
-
wasd bunu yazdıYeniHarman bunu yazdı
Konu ile uzaktan alakalı olarak: Giriş akımlarını fflush ile temizlemek hatalıdır (stdin de bir giriş akımıdır). fflush işlevi çıkış akımlarında kullanılmalıdır.
getch işlevinin de int döndürdüğünü hatırlıyorum. Bir karakter char'dan daha büyük boyuttaki veri tipleri ile de tutmakta sakınca yok:)
çok fazla bilgi sahibi değilim, tabiki bilgisayar açısından sakınca yok ama "int puan" demek sayı tutmak için kullanılıyor fikri yaratır insanda, kodun satır sayısı arttıkça kafa karıştırır, "char not" olarak kullanmak hem kafa karışmasını engeller hem az da olsa bellekten tasarruf ettirir
Kafa karışıklığı konusunda haklısın ancak, while ((c = getchar()) != EOF) ifadesi C'de sık kullanılan bir kalıp ve int ile kullanılıyor, çünkü EOF değeri standart karakter seti dışında özel bir karakter olarak kabul ediliyor (int)-1, otomatik casting nedeniyle int, char farketmez ancak, EOF kullanılıyorsa int, kalan her yerde char kullanmak daha iyi, zaten getchar'ın dönüş türünün int olma sebebi de EOF.
Bellek tasarrufu konusu daha yanlış anlaşılmış bir konu, öncelikle int yerine char kullanmak bellekte tasarruf sağlamaz. Zira sen kullansan da kullanmasan da işletim sistemi program başladığında sana thread başına belli bir stack alanı verir, genelde 1 mb ancak linker ayarları ile değiştirilebilir. İkincisi 32 bit işlemciler 4 baytlık değişkenlerle işlemleri 1 baytlık değişkenlerden daha hızlı yaparlar. 1 baytlık işlemler için ekstra prefix eklenir instructionlara (makina kodu komutları).
Bir diğer konu işletim sisteminin memory manageri ile ilgili. Windows için, memory manager kullanılmayan sayfaları önce standby belleğe ardından modified a ve diske (pagefile.sys) yazar, fiziksel bellekte olmayıp kullanılmak istenen sayfaları mevcutsa standby dan (soft page fault) yoksa diskten belleğe taşır (hard page fault). Bu işlem yapılırken kullanılan sayfa boyutu en az 4kb dir. Özetle 1 bayt ve 4 bayt arasındaki fark işletim sistemi için anlamsızdır.
Optimizasyon en kaçınılması gereken konuların başında geliyor programlamada. Eğer bir program çok yavaş çalışmıyorsa ve gerçekten hızlanması ya da daha az bellek kullanması gerekmiyorsa, optimizasyon yapmaya çalışmayın, siz programın tasarımı ile ilgilenin, hızı ile derleyici ilgilensin. İki büyük bilgisayar dehasının optimizasyon konusunda söyledikleri.
Premature optimization is the root of all evil. Donald Knuth
The first principle of optimization is don't. Brian W. Kernighan
-
case'\n':case' ‘ ':
break;
-------
Case lerin sonuna bu satırları ekleyince problem kalmadı. /n ve ‘ işaretlerini böylelikle veri olarak kabul etmiyormuş.Yardımlarınız için teşekkürler. -
Bide şu EOF meselesine gelince. getchar() != EOF dışında kafadan sallama harfler girdigimde derleyici hata veriyor. Çıkış işlemi için -1 e karşılık gelen harflerimi girmem gerekiyor. ben cikis yaz dedigimde cikis yaptıramazmıyız . Yada int de yada char da
int cikis=-1;
char cikis=-1; olarak saklasak çıkarmı. (çikiş olayı aklıma yazarken geldi denemedim , deniyorum şimdi.)
edit: denedigim şeyi denedim cikis olarak girersek olmuyor ama CTRL+Z yaparsak oluyor.
-
Şimdi ASCII kod kümesini kullanıyoruz (0-127), bir de konsolumuza göre genişletilmiş kısmı kullanıyoruz (128-255). char'ın boyutu 1 bayt kabul edilirse (standartta yanlış anladığım bir konudan bir tanesidir bu, şu an doğru şeklini hatırlamıyorum. Bu yüzden kafa karıştırmayayım.) ve unsigned char (signed char olursa 128-255 değerlerini yakalayamayız) olarak değeri okumuşsak platforma bağımlı olarak tanımlanmış -1 değerini yakalayamayabiliriz.
(-1 (10) = 1111 1111 (2), işaretli;
127 (10) = 0111 1111 (2), işaretli;
255 (10) = 1111 1111 (2), işaretsiz)
getchar işlevi ile konsoldan karakter okuyoruz, bu yüzden -1 tek bir karakter değil, 2 karakterdir:)
http://ideone.com/jB6sY4
YeniHarman tarafından 15/Oca/13 21:09 tarihinde düzenlenmiştir