switch ile aşağıdaki gibi yazılıyor. kitapta bunu if else ile yazmamız istenmiş. biraz uğraştım fakat istediğim gibi çalıştıramadım bir tülü. yardımlarınızı bekliyorum.
//Harf notlarının sayılması
#include <stdio.h>
int main() { int not1; int aSay=0, bSay=0, cSay=0, dSay=0, fSay=0;
printf("Harf notlarini girin.\n"); printf("Cikis icin EOF karakteri (ctrl+z MSDOS sisteminde) girin.\n");
while ((not1=getchar())!=EOF){ switch (not1){ /*while içine yuvalanmış switch*/
case 'A': case 'a': //not büyük A yada küçük a iken ++aSay; break;
case 'B': case 'b': //not büyük B yada küçük b iken ++bSay; break;
case 'C': case 'c': //not büyük C yada küçük c iken ++cSay; break;
case 'D': case 'd': //not büyük D yada küçük d iken ++dSay; break;
case 'F': case 'f': //not büyük F yada küçük f iken ++fSay; break;
case '\n': //bunları veri olarak kabul etme break;
default: //diğer tüm karakterleri yakala printf("Yanlis harf notu girildi."); printf("Yeni bir not girin.\n"); break; } }
printf("\n Her harf notu icin toplam:\n"); printf("A: %d\n",aSay); printf("B: %d\n",bSay); printf("C: %d\n",cSay); printf("D: %d\n",dSay); printf("F: %d\n",fSay);
return 0; }
Bu da if else ile yazmaya çalıştığım kod. Tahmin yürüterek yazmaya çalıştım ama bu şekilde yazmak hatalı sanırım. nasıl yazmam lazım?
#include <stdio.h>
int main() { int not1; int aSay=0, bSay=0, cSay=0, dSay=0, fSay=0; int a,b,c,d,f,A,B,C,D,F;
printf("Harf notlarini girin.\n"); printf("Cikis icin EOF karakteri (ctrl+z MSDOS sisteminde) girin.\n"); scanf("%c",¬1);
while ((not1=getchar())!=EOF){ if (not1==a || not1==A){ ++aSay; break; }
else if (not1==b || not1==B){ ++bSay; break; }
else if (not1==c || not1==C){ ++cSay; break; }
else if (not1==d || not1==D){ ++dSay; break; }
else if (not1==f || not1==F){ ++fSay; break; }
else if (not1==\n){ break; }
else { printf("Yanlis harf notu girildi."); printf("Yeni bir not girin.\n"); break; } }
printf("\n Her harf notu icin toplam:\n"); printf("A: %d\n",aSay); printf("B: %d\n",bSay); printf("C: %d\n",cSay); printf("D: %d\n",dSay); printf("F: %d\n",fSay);
return 0; }
her bir if bloğunu aşağıdaki gibi yaparsan çalışır sanırım... break'lere gerek yok zira onlar case'den çıkmak için, burda ise döngüden çıkar.
if ((not1=='a') || (not1=='A')){ ++aSay; }
* not1==a || not1==A demişsin. a ve A yı da int tipinde değişken olarak tanımlamışsın. Hiçbir anlam ifade etmiyor. bunlar giriş olarak karakter bazında alınıcak. not1=='a' || not1=='A' diyiceksin ve değişken olarak böyle bişey tanımlamana gerek yok.
* if bloğundan sonra başka şartların varsa "else if " kullanıcaksın. "else" demek geri kalan tüm şartlar için demektir.
* Her if bloğunun içinde "break" kullanmışsın. Break döngüden çıkmaya yarar. Yani eğer bu program diğer tüm problemleri hallettiğinde çalışsa bile tek bir değer alıp onu saydıktan sonra döngüden çıkacaktır. "Continue" kullanmalısın.Continue döngünün başına gitmeye yarar.
* İlk baştaki scanf("%c",¬1); e gerek yok.Bu aldğıın değeri saymıyorsun. İlk girilen değer (misal a), bir eksik çıkacaktır bunu kullanırsan.
* Break in amacını gör diye EOF girilme koşulunu break yardımıyla ayırdım.EOF girildiği takdirde break ile döngüden çıkılıyor.
#include <stdio.h> #include <conio.h>
int main() { int not1; int aSay=0, bSay=0, cSay=0, dSay=0, fSay=0;
printf("Harf notlarini girin.\n"); printf("Cikis icin EOF karakteri (ctrl+z MSDOS sisteminde) girin.\n");
while (not1=getchar()) { if (not1=='a' || not1=='A'){ ++aSay;
}
else if(not1=='b' || not1=='B'){ ++bSay;
}
else if(not1=='c' || not1=='C'){ ++cSay;
}
else if (not1=='d' || not1=='D'){ ++dSay;
}
else if (not1=='f' || not1=='F'){ ++fSay;
}
else if (not1=='\n'){ continue; }
else if (not1==EOF){ break; }
else { printf("Yanlis harf notu girildi."); printf("Yeni bir not girin.\n"); continue; } }
printf("\n Her harf notu icin toplam:\n"); printf("A: %d\n",aSay); printf("B: %d\n",bSay); printf("C: %d\n",cSay); printf("D: %d\n",dSay); printf("F: %d\n",fSay);
getch();
return 0; }
Ben insanlara böyle şeyler söylemeyi pek sevmem, çünkü ukalalık olarak algılıyolar ama inan ki samimiyetimden söylüyorum. Bu konuda eksik olduğun yazdığın programda anlaşılıyor.Bunlar temel konulardır.Bunları şimdiden iyi öğrenirsen ilerde zorluk çekmezsin.
Bilgisayar Mühendisliği okuyormuşsun.Zaten bunları sana ite kaka öğreticekler mezun edene kadar.Ama sen başta temelini iyi kavrarsan, daha sonra OOP'ymiş, betik dillermiş çorap söküğü gibi gelir.
Bizde ilk başta verilen Fortran'ı anlayamadan geçen arkadaşlar daha sonra C'de Assembly'de MATLAB'da döküldüler. Ama temelini kavrayanlar vizeye finale bile çalışmadan girdi ve iyi notlar aldı.
haklısınız hocam. başlarda söylediklerinizin çoğunu denedim. mesela int olarak tanımlamışım, char ı da denedim. yada a yerine 'a' yazmayı da denedim. break leri silip denedim. ne yaptıysam a,b,c,d,f den birini girdikten sonra saydıramadım. en son karman çorman bişey çıktı böyle. aslında hiç koymayacaktım kendi yazdığım kodları ama uğraştığımı anlayın diye koydum birazda :) continue aklıma gelmedi. sanırım bu yüzden doğru dürüst sonuç alamadım. daha 1. sınıftayım kitaptaki kodları yazmaya çalışıyorum. malesef hocamıza soru da soramıyoruz adam ya rencide ediyor ya da dalga geçiyor. ama 2. dönem başlayana kadar kendimi sizler sayesinde geliştireceğim inşallah. teşekkürler...
Rica ederim.Sizin yaptığınız doğru olan.
İnsanlar buraya gelip şu konuda takıldım diyor,ortaya hiçbirşey koymamış.
Özellikle elektronik forumunda çok oluyor. Ne devresini koymuş, ne simülasyonunu koymuş, ne programını, şu konuda takıldım diyor.Kimsenin de işi gücü yok devreyi çizip programını yazıcak.
Ama bu şekilde program -veya devre her neyse- verildği zaman müdahale etmek hem zaman almıyor, hem de kişinin iyiniyetinizi su istimal etmediğini biliyorsunuz.(Misal ödevini size yaptırtmaya çalışarak)
İşinize karışmak gibi olmasında continue nun herhangi bir etkisi olmaz bu durumda. if-else şekline yazıldığı için bir koşullu ifade çalıştıktan sonra zaten diğerlerine bakmaz. Fakat sadece if ile yazılmış olsaydı continue bir işe yarayabilirdi.
İşinize karışmak gibi olmasında continue nun herhangi bir etkisi olmaz bu durumda. if-else şekline yazıldığı için bir koşullu ifade çalıştıktan sonra zaten diğerlerine bakmaz. Fakat sadece if ile yazılmış olsaydı continue bir işe yarayabilirdi.
Hatalıysa karışın niye karışmayasınız
Continue kullanmazsak karakter girmeden enter a basılınca döngünün başa dönmesini nasıl sağlıycaz peki ?
Ben bütün break lerin yerine continue yaz dediniz sandım, koda bakmadım. Ama yinede ben olsam bu yöntemi tercih etmezdim.
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme