Çö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;
}
Böyle bir switch-case yapısı görmedim ben daha önce. Syntax hatalı gibi gözüküyor sanki.

Eğer iki tane case değerinin aynı işlemi yapmasını istiyorsan, ya iki case değerine de aynı işlemi yaptırırsın:

C++:
case'C':
    ++cCount;
    break;

case'c':
    ++cCount;
    break;

ya da if-else kullanırsın.
 
"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.

Eğer iki tane case değerinin aynı işlemi yapmasını istiyorsan, ya iki case değerine de aynı işlemi yaptırırsın:
Switch-case'in böyle bir kullanımı var.
 
"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;
}
Bu kodda 1 tane döngü var switch() bir döngü değil. Ama C++ bilmediğim için oradaki break; komutu while döngüsünü kırar mı bilmiyorum. Onun yerine;

C++:
kodBitti = false;
while (kodBitti == true) {
    ...
    case 'c':
        kodBitti = false;
}

gibi bir komut da kullanılabilir.
 
Bu kodda 1 tane döngü var switch() bir döngü değil. Ama C++ bilmediğim için oradaki break; komutu while döngüsünü kırar mı bilmiyorum.

"break" komutu {} 'dan çıkarıyor switch'te. Aynı şey döngüler için de geçerli. Yanlış tabir etmişim ama anlatmak isteneni anlamıştır arkadaş. Sorun o.
 
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;
}
 
Son düzenleme:
Çözüm
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.
 
Son düzenleyen: Moderatör:
"break" komutu {} 'dan çıkarıyor switch'te. Aynı şey döngüler için de geçerli. Yanlış tabir etmişim ama anlatmak isteneni anlamıştır arkadaş. Sorun o.
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;
}
Hocam tekrar rahatsız ediyorum fakat acaba press any key to continue yazısını görmeden CMD'yi kapatmamız mümkün mü?
 

Yeni konular

Geri
Yukarı