Merhabalar. Öncelikle iyi forumlar dilerim. Bugün yapmış olduğum programda anlamsız bir hata alıyorum. Çözümünü bilen yardımcı olabilir mi?
C++:
#include <iostream>
using namespace std;
int main()
{
char grade,
aCount=0,
bCount=0,
cCount=0;
bool cont=false;
int bar=-1;
cout<<"Enter the letter grades"<<endl
<<"Enter the EOF character to end input."<<endl;
while( (grade=cin.get()) != bar)
{
switch (grade) {
case 'A': case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout<<"Incorrect letter grade entered."<<"\n\n\nEnter a new grade\n";
}
}
cout<<"\nTotals for each letter grade are:"
<<"A:"<<aCount
<<"B:"<<bCount
<<"C:"<<cCount<<endl;
}
Böyle bir switch-case yapısı görmedim ben daha önce. Dalga geçmek için demiyorum yanlış anlama belki ben daha önce görmemişimdir ama bana syntax hatalı gibi geldi.
Siz görmemişsiniz. Tipi biraz yamuk olsa da kullanım doğru. A harfi için olan kısım da B ve C harfi için olanla aynı olmalı o kadar.
char alıp -1 girmeye çalışıyorsun. Ama - ve 1 farklı karakterler. -1 ASCII'de ne bilmiyorum. Ama 0 aslında 48. Bu yüzden bar değişkenini 48 yapıp 0 girince programın sonlanmasını sağladım.
aCount, bCount ve cCount nedense int yerine char olarak tanımlanmış. Değiştirdim.
while içinde switch-case kullandığın için sanırım o break'ler while a etki ediyor. Bu yüzden scope tanımladım. Yine de aynı olayı yapmaya devam ediyor.
Olayı çözdüm. Sen girdi alırken bastığın enter'ı da alıyor. Buffer'da kaldığı için alıyor. Bu yüzden && != 'enter' ekledim. Bu durumda da while döngüsü bozuluyor. Ben sana yaptığım değişiklikleri atayım sen gerisini halledersin. Ama muhtemelen farklı bir yol kullanman gerekecek.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar && grade != '\n') {
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}
Bu arada konuya gelen cevaplarsa işe yarar tek şey şuydu. O da sadece doğru bilgi. Konuya bir yararı pek yok.
"break" komutu seni döngüden çıkartıyor ama iki döngü var. Burada while'a gerek yok, istemediğin değerleri default case'inde gösterebilirsin.
Switch-case'in böyle bir kullanımı var.
C++:
#include <iostream>
using namespace std;
int main()
{
char grade,
aCount=0,
bCount=0,
cCount=0;
bool cont=false;
int bar=-1;
cout<<"Enter the letter grades"<<endl
<<"Enter the EOF character to end input."<<endl;
switch (grade) {
case 'A': case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout<<"Incorrect letter grade entered."<<"\n\n\nEnter a new grade\n";
}
cout<<"\nTotals for each letter grade are:"
<<"A:"<<aCount
<<"B:"<<bCount
<<"C:"<<cCount<<endl;
}
Böyle bir switch-case yapısı görmedim ben daha önce. Dalga geçmek için demiyorum yanlış anlama belki ben daha önce görmemişimdir ama bana syntax hatalı gibi geldi.
Siz görmemişsiniz. Tipi biraz yamuk olsa da kullanım doğru. A harfi için olan kısım da B ve C harfi için olanla aynı olmalı o kadar.
char alıp -1 girmeye çalışıyorsun. Ama - ve 1 farklı karakterler. -1 ASCII'de ne bilmiyorum. Ama 0 aslında 48. Bu yüzden bar değişkenini 48 yapıp 0 girince programın sonlanmasını sağladım.
aCount, bCount ve cCount nedense int yerine char olarak tanımlanmış. Değiştirdim.
while içinde switch-case kullandığın için sanırım o break'ler while a etki ediyor. Bu yüzden scope tanımladım. Yine de aynı olayı yapmaya devam ediyor.
Olayı çözdüm. Sen girdi alırken bastığın enter'ı da alıyor. Buffer'da kaldığı için alıyor. Bu yüzden && != 'enter' ekledim. Bu durumda da while döngüsü bozuluyor. Ben sana yaptığım değişiklikleri atayım sen gerisini halledersin. Ama muhtemelen farklı bir yol kullanman gerekecek.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar && grade != '\n') {
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}
Bu arada konuya gelen cevaplarsa işe yarar tek şey şuydu. O da sadece doğru bilgi. Konuya bir yararı pek yok.
Siz görmemişsiniz. Tipi biraz yamuk olsa da kullanım doğru. A harfi için olan kısım da B ve C harfi için olanla aynı olmalı o kadar.
char alıp -1 girmeye çalışıyorsun. Ama - ve 1 farklı karakterler. -1 ASCII'de ne bilmiyorum. Ama 0 aslında 48. Bu yüzden bar değişkenini 48 yapıp 0 girince programın sonlanmasını sağladım.
aCount, bCount ve cCount nedense int yerine char olarak tanımlanmış. Değiştirdim.
while içinde switch-case kullandığın için sanırım o break'ler while a etki ediyor. Bu yüzden scope tanımladım. Yine de aynı olayı yapmaya devam ediyor.
Olayı çözdüm. Sen girdi alırken bastığın enter'ı da alıyor. Buffer'da kaldığı için alıyor. Bu yüzden && != 'enter' ekledim. Bu durumda da while döngüsü bozuluyor. Ben sana yaptığım değişiklikleri atayım sen gerisini halledersin. Ama muhtemelen farklı bir yol kullanman gerekecek.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar && grade != '\n') {
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}
Bu arada konuya gelen cevaplarsa işe yarar tek şey şuydu. O da sadece doğru bilgi. Konuya bir yararı pek yok.
Bu şekilde çözebilirsin. Tercih edeceğin bir yöntem olur mu bilmem.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar) {
if (grade == '\n')
continue;
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}
Hocam çok teşekkür ediyorum. En iyi cevap ya da çözüldü durumu nasıl yapılıyor bilmediğim için maalesef yapamıyorum ama sorunumu çözdüğünüz için tekrardan çok teşekkür ederim. İyi forumlar dilerim.
Tamam ben de anladım şimdi teşekkür ederim. "break" komutunun switch'den çıkarması baya bi garibime gitti, galiba döngülerden ziyade içinde bulunduğu scope'dan çıkarıyormuş.
Siz görmemişsiniz. Tipi biraz yamuk olsa da kullanım doğru. A harfi için olan kısım da B ve C harfi için olanla aynı olmalı o kadar.
char alıp -1 girmeye çalışıyorsun. Ama - ve 1 farklı karakterler. -1 ASCII'de ne bilmiyorum. Ama 0 aslında 48. Bu yüzden bar değişkenini 48 yapıp 0 girince programın sonlanmasını sağladım.
aCount, bCount ve cCount nedense int yerine char olarak tanımlanmış. Değiştirdim.
while içinde switch-case kullandığın için sanırım o break'ler while a etki ediyor. Bu yüzden scope tanımladım. Yine de aynı olayı yapmaya devam ediyor.
Olayı çözdüm. Sen girdi alırken bastığın enter'ı da alıyor. Buffer'da kaldığı için alıyor. Bu yüzden && != 'enter' ekledim. Bu durumda da while döngüsü bozuluyor. Ben sana yaptığım değişiklikleri atayım sen gerisini halledersin. Ama muhtemelen farklı bir yol kullanman gerekecek.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar && grade != '\n') {
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}
Bu arada konuya gelen cevaplarsa işe yarar tek şey şuydu. O da sadece doğru bilgi. Konuya bir yararı pek yok.
Bu şekilde çözebilirsin. Tercih edeceğin bir yöntem olur mu bilmem.
Kod:
#include <iostream>
using namespace std;
int main() {
char grade = 0;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int bar = 48;
bool cont = false;
cout << "Enter the letter grades" << endl
<< "Enter the EOF character to end input." << endl;
while ((grade = cin.get()) != bar) {
if (grade == '\n')
continue;
switch (grade) {
case 'A':
case 'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
default:
cout << "Incorrect letter grade entered." << "\n\n\nEnter a new grade\n";
}
}
cout << "\nTotals for each letter grade are: "
<< " A: " << aCount
<< " B: " << bCount
<< " C: " << cCount << endl;
return 0;
}