C++ da switch case ve if else hatası

Hserhat

Zeptopat
Katılım
28 Mayıs 2022
Mesajlar
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:
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;

}
1653735927283.png

1653735975946.png



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');

}
 
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;
}
 

Geri
Yukarı