Çözüldü C++ Switch case Hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Yasir Aykac

Picopat
Katılım
7 Temmuz 2020
Mesajlar
21
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;
}
 
Son düzenleyen: Moderatör:
Çözüm
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.
Switch-case'in böyle bir kullanımı var.
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;
}

Yeni konular

Geri
Yukarı