Çözüldü C++ da switch case ve if else hatası

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

Hserhat

Decapat
Katılım
28 Mayıs 2022
Mesajlar
9
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
C++ da temel bir kütüphane otomasyon sistemi yapmaya çalışıyorum fakat kodumdaki "islemnum" değişkenini switch case yapısında yaparsam koşullar sağlandığı zaman sadece ilk case yapısı doğru çalışıyor , diğerlerine gireceği zaman herhangi bir değer atamama izin vermeden kodu bitiriyor. Switch case kısmı yerine if else yapısını yaptım fakat yine aynı şekilde yanlış çalışıyor.
Kod:
#include <iostream>

#include <fstream>

#include <string>

#include <conio.h>



    using namespace std;

  

    class ogrenci{

    public:

    string ogrisim,ogrnum,tarih;

    ogrenci(){

    cout<<"isminizi giriniz:(ingilizce karekterler ile)";

    getline(cin,ogrisim);

    cout<<"\nogrenci numarinizi girin:";

    cin>>ogrnum;

    cout<<"\ntarihi giriniz:";

    cin>>tarih;

};

};





    class islemler : public ogrenci{

        public:

    islemler(){

    int found=0,found1=0,found3=0,islemnum;

    string kitapisim,satir,isimbulma;

    cout<<"1-kitap alma islemi\n2-kitap iade islemi\n3-kitap bagıslama islemi";

    cout<<"Yapmak istediginiz islemin numarasini giriniz:";

    cin>>islemnum;

  

  

      

    if(islemnum==1){



      

      

      

    cout<<"kitabin ismini giriniz:(ingilizce karekterler ile)";

    cin>>kitapisim;

    ifstream oku;

    oku.open("kutuphane.txt");

    while(getline(oku,satir)){

    if(kitapisim.compare(satir)==0){

    found1=1;

    break;

    }   

};

    oku.close();

    if(found1=1){

        cout<<"bulundu"<<endl;

        ofstream yaz;

        yaz.open("ogrenci.txt",ios::app);

        yaz<< ogrisim << "       " << ogrnum << "       " << tarih << "       " << kitapisim << "       alindi" <<endl;

        yaz.close();

    }

    else{

        cout<<"bulunmadi"<<endl;

    };}

  



  

  

    else if(islemnum==2){

      

    cout <<"kitabin ismini giriniz(ingilizce karekterler ile):";

    getline(cin,kitapisim);

    isimbulma = (ogrisim + "       " + ogrnum + "       " + tarih + "       " + kitapisim + "       alindi");



    ifstream okum;

    okum.open("ogrenci.txt");

    while(getline(okum,satir)){

    if(isimbulma.compare(satir) ==0){

        ofstream yaz;

        yaz.open("ogrenci.txt",ios::app);

        yaz<<"   -   iade edildi"<<endl;

        yaz.close();

        cout<<"islem basariyla tamamlandi.";

        found=1;

        break;

    }

    else{

    }};   

    okum.close();

    try{

        if(found==0){

            throw "islem basarisiz.";

    }}

    catch(const char* a){

        cout<<a<<endl;

    }}





    else if(islemnum==3){

      



  

  

    cout <<"kitabin ismini giriniz(ingilizce karekterler ile):";

    getline(cin,kitapisim);

    ifstream okuma;

    okuma.open("kutuphane.txt");

    while(getline(okuma,satir)){

    if(kitapisim.compare(satir)==0){

    found3=1;

    }

    else{

}};   

    okuma.close();

    if(found3==1){

        cout << "kitap kutuphanemizde mevcut."<<endl;

    }

    else{

        ofstream yaz;

        yaz.open("kutuphane.txt",ios::app);

        yaz<< kitapisim << endl;   

        yaz.close();

        cout<<"islem basariyla tamamlandi."<<endl;

    }}

  

    else{

    cout<<"error."<<endl;

    }





}};

  

  

  

  

    int main(){



    islemler();

    return 0;

}
 
Son düzenleyen: Moderatör:
Çözüm
Kodu incelemedim, kod paylaşırken biraz daha özenli davranın. Değer girmeden yoluna devam ediyorsa standart inputta sorun vardır muhtemelen. getline fonksiyonu öncesi şu satırları eklemeyi deneyebilirsin.

C++:
#include <limits> //headeri ekle

if (cin.fail()) {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

}
Satir aralarindaki bosluklari ozellikle mi koydun? Kodu okumayi cok zorlastiriyor, hele bazi yerlerde 10 satir bosluk var gibi.
 




Bosluklar gozumu kor etmis ki amaciniza odaklanamamisim. Kodu duzeltirseniz bir bakabilirim ancak kod malaesef fazla daginik insan gozu icin.
 
Son düzenleme:
Kodu incelemedim, kod paylaşırken biraz daha özenli davranın. Değer girmeden yoluna devam ediyorsa standart inputta sorun vardır muhtemelen. getline fonksiyonu öncesi şu satırları eklemeyi deneyebilirsin.

C++:
#include <limits> //headeri ekle

if (cin.fail()) {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

}
 
Çözüm
islemnum==2 ve islemnum==3 için cout <<"kitabin ismini giriniz(ingilizce karakterler ile):"; satırından sonra cin>>kitapisim; eklememişsin. Kodu buraya attığın şekilde yazıyorsan ileride baktığında hiçbir şey anlayamazsın.
C++:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
    class ogrenci{
    public:
    string ogrisim,ogrnum,tarih;
    ogrenci(){
        cout<<"isminizi giriniz:(ingilizce karekterler ile)";
        getline(cin,ogrisim);
        cout<<"\nogrenci numarinizi girin:";
        cin>>ogrnum;
        cout<<"\ntarihi giriniz:";
        cin>>tarih;
    };
};
class islemler : public ogrenci {
    public:
    islemler(){
        int found=0,found1=0,found3=0,islemnum;
        string kitapisim,satir,isimbulma;
        cout<<"1-kitap alma islemi\n2-kitap iade islemi\n3-kitap bagıslama islemi"<< endl;
        cout<<"Yapmak istediginiz islemin numarasini giriniz:";
        cin>>islemnum;
        if(islemnum==1){
            cout<<"kitabin ismini giriniz:(ingilizce karakterler ile)";
            cin>>kitapisim;
            ifstream oku;
            oku.open("kutuphane.txt");
            while(getline(oku,satir)){
                if(kitapisim.compare(satir)==0){
                    found1=1;
                    break;
                }
            };
            oku.close();
            if(found1=1){
                cout<<"bulundu"<<endl;
                ofstream yaz;
                yaz.open("ogrenci.txt",ios::app);
                yaz<< ogrisim << "       " << ogrnum << "       " << tarih << "       " << kitapisim << "       alindi" <<endl;
                yaz.close();
            } else{
                cout<<"bulunmadi"<<endl;
            };
        } else if(islemnum==2){
            cout <<"kitabin ismini giriniz(ingilizce karakterler ile):";
            cin>>kitapisim;
            getline(cin,kitapisim);
            isimbulma = (ogrisim + "       " + ogrnum + "       " + tarih + "       " + kitapisim + "       alindi");
            ifstream okum;
            okum.open("ogrenci.txt");
            while(getline(okum,satir)){
                if(isimbulma.compare(satir) ==0){
                ofstream yaz;
                yaz.open("ogrenci.txt",ios::app);
                    yaz<<"   -   iade edildi"<<endl;
                    yaz.close();
                    cout<<"islem basariyla tamamlandi.";
                    found=1;
                    break;
                } else{
                }
            };
            okum.close();
            try {
                if(found==0){
                throw "islem basarisiz.";
            }} catch(const char* a){
                cout<<a<<endl;
            }
        } else if(islemnum==3){
            cout <<"kitabin ismini giriniz(ingilizce karakterler ile):";
            cin>>kitapisim;
            getline(cin,kitapisim);
            ifstream okuma;
            okuma.open("kutuphane.txt");
            while(getline(okuma,satir)){
                if(kitapisim.compare(satir)==0){
                    found3=1;
                } else{
                }
            };  
            okuma.close();
            if(found3==1){
                cout << "kitap kutuphanemizde mevcut."<<endl;
            } else{
                ofstream yaz;
                yaz.open("kutuphane.txt",ios::app);
                yaz<< kitapisim << endl;  
                yaz.close();
                cout<<"islem basariyla tamamlandi."<<endl;
            }
        } else{
            cout<<"error."<<endl;
        }
    }
};
int main(){
islemler();
return 0;
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…