Problem z Case

0

Siemka. Mam problem z programem. Miał działać tak:
*Podaje się mu liczbę osób, nazwy tych osób, sieć i telefon
*Program je zapisuje w pliku kontakty.txt
Ale coś z tym case jest nie tak, proszę o pomoc.


#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
    int wybor;
    string *nazwy, *siec, *numery;
    cout << "Aby dopisac kontakt do swojej listy wcisnij 1" << endl;
    cout << "aby zobaczyc liste kontaktow wcisnij 2" << endl;
    cin >> wybor;
    switch(wybor)
    {
    case 1:
    int IloscOsob;
    cout << "Podaj ilosc osob:" << endl;
    cin >> IloscOsob;
    nazwy = new string[IloscOsob];
    numery = new string[IloscOsob];
    siec = new string[IloscOsob];
    if (IloscOsob < 1)
    {
        cout << "Za malo osob." << endl;
        system("pause");
        return 0;
    }
    for (int nr = 0; nr < IloscOsob; nr++)
    {

        cout << "\nOsoba " << nr+1 << ":" << endl;
        cin >> nazwy[nr];
        cout << "Siec:" << endl;
        cin >> siec[nr];
        cout << "Nr telefonu:" << endl;
        cin >> numery[nr];
    }
    ofstream Dane("kontakty.txt", ios::app);
    for (int b = 0; b < IloscOsob; b++)
    {
        Dane << "\nOsoba: " << nazwy[b] << " Siec: " << siec[b] << " Nr telefonu: " << numery[b] << endl;
    }
    Dane.close();
    break;
    case 2:
    fstream plik;
    Dane.open("kontakty.txt", ios::in);
    if(plik.good()==true)
    {   
        cout << "Twoje kontakty: " << endl;
        cout << "Osoba: " << nazwy[b] << " Siec: " << siec[b] << " Nr telefonu: " << numery[b] << endl;
    }
    else cout << "Dostep do pliku zostal zabroniony!" << endl;
    break;
    default:
    cout<<"Opcja "<<wybor<<" nie istnieje!"<<endl;
    delete [] nazwy;
    delete [] siec;
    delete [] numery;
    getch();
    return 0;
} 
0

po pierwsze:

: error C2065: 'b' : undeclared identifier

NIe masz nigdzie zadeklarowane b. Po drugie ten kod to jakaś lipa totalna.. Słyszałeś o std::vector?

0

Nie słyszałem o takim czymś, jestem początkujący, a 'b' mam zdeklarowane

 for (int b = 0; b < IloscOsob; b++) 
0

w takim razie slyszałeś o obszarach nazw i zasięgu zmiennych?:)
Poza tym brakuje Ci klamer i w ogóle za dużo tu błędów, żeby chciało mi się wrzucić to w kompilator i szukać wszystkich po kolei..

0

deklarowanie zmiennych w w blokach case : switcha wymaga użycia dodatkowych klamer otaczających dany blok:

switch(..)
{ 
  case x :
  {
     int a ;
     fstream plik;

     /*cos*/
  }


//itd

} // end switch
0

Na prawdę potrzebuje pomocy :D

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{   
    int IloscOsob;
    int wybor;
    string *nazwy, *siec, *numery;
    nazwy = new string[IloscOsob];
    numery = new string[IloscOsob];
    siec = new string[IloscOsob];
    cout << "Aby dopisac kontakt do swojej listy wcisnij 1" << endl;
    cout << "aby zobaczyc liste kontaktow wcisnij 2" << endl;
    cin >> wybor;
    switch(wybor)
    {
    case 1:
    {
    cout << "Podaj ilosc osob:" << endl;
    cin >> IloscOsob;
    
    if (IloscOsob < 1)
    {
        cout << "Za malo osob." << endl;
        system("pause");
        return 0;
    }
    for (int nr = 0; nr < IloscOsob; nr++)
    {

        cout << "\nOsoba " << nr+1 << ":" << endl;
        cin >> nazwy[nr];
        cout << "Siec:" << endl;
        cin >> siec[nr];
        cout << "Nr telefonu:" << endl;
        cin >> numery[nr];
    }
    ofstream Dane("kontakty.txt", ios::app);
    for (int b = 0; b < IloscOsob; b++)
    {
        Dane << "\nOsoba: " << nazwy[b] << " Siec: " << siec[b] << " Nr telefonu: " << numery[b] << endl;
    }
    Dane.close();
    }
    break;
    case 2:
    {
    fstream plik;
    Dane.open("kontakty.txt", ios::in);
    if(plik.good()==true)
    {   
        cout << "Twoje kontakty: " << endl;
        cout << "Osoba: " << nazwy[b] << " Siec: " << siec[b] << " Nr telefonu: " << numery[b] << endl;
    }
    else cout << "Dostep do pliku zostal zabroniony!" << endl;
    }
    }
    break;
    default:
    cout<<"Opcja "<<wybor<<" nie istnieje!"<<endl;
    delete [] nazwy;
    delete [] siec;
    delete [] numery;
    getch();
    return 0;
}

Poprawcie mi błędy, proszę.

0

Poprawiłem na:

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{//otwieram nie wiem co
    int IloscOsob;
    char wybor;
    int b = 0; 
    string *nazwy, *siec, *numery;
    cout << "Aby dopisac kontakt do swojej listy wcisnij 1" << endl;
    cout << "aby zobaczyc liste kontaktow wcisnij 2" << endl;
    cin >> wybor;
    switch(wybor)
    {//otwieram switch
        case 1:
        {//otwieram case 1
            cout << "Podaj ilosc osob:" << endl;
            cin >> IloscOsob;
            nazwy = new string[IloscOsob];
            numery = new string[IloscOsob];
            siec = new string[IloscOsob];
            if (IloscOsob < 1)
            {//otwieram if
                cout << "Za malo osob." << endl;
                system("pause");
                return 0;
            }//zamykam if
            for (int nr = 0; nr < IloscOsob; nr++)
            {//otwieram for
                cout << "\nOsoba " << nr+1 << ":" << endl;
                cout << "Imie: " << endl;
                cin >> nazwy[nr];
                cout << "Siec: " << endl;
                cin >> siec[nr];
                cout << "Nr telefonu: " << endl;
                cin >> numery[nr];
            }//zamykam for
            ofstream Dane("kontakty.txt", ios::app);
            for (b; b < IloscOsob; b++)
            {//otwieram for
                cout << "\nImie: " << nazwy[b] << "   Siec: " << siec[b] << "   Nr telefonu: " << numery[b] << endl;
                Dane << "\nImie: " << nazwy[b] << "   Siec: " << siec[b] << "   Nr telefonu: " << numery[b] << endl;
            }//zamykam for
            Dane.close();
            fstream plik;
            Dane.open("kontakty.txt", ios::in);
        }//zamykam case 1
        case 2:
        {//otwieram case 2
            ofstream Dane("kontakty.txt", ios::in);
            for (b; b < IloscOsob; b++)
            {//otwieram for
                cout << "\nImie: " << nazwy[b] << " Siec: " << siec[b] << " Nr telefonu: " << numery[b] << endl;
            }//zamykam for
            Dane.close();
            fstream plik;
            Dane.open("kontakty.txt", ios::in);  
        }//zamykam case 2    
    }//zamykam switch
    delete [] nazwy;
    delete [] siec;
    delete [] numery;
    system("pause");
    return 0;
}//zamykam nie wiem co

Kompiluje bez błędów, ale jak włączę ten program i wybiorę

case 1

albo

case 2

to się zwiesza, muli komputer i za parę sec. wywala błąd windows.
Co jest w tym kodzie nie tak?

0

O matko , nic nie poprawiłeś , ten kod jest totalnie do d*y .
Przemyśl najpierw kolejnośc wykonywania działań bo nawaliłeś zmiennych bez ładu i składu .
w case używa sie break; inaczej kod leci do kolejnego case bez względu na wszystko .

0
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{//otwieram nie wiem co
    startq:
    system ("title Moje kontakty");
    int IloscOsob;
    int wybor;
    int b = 0; 
    string *nazwy, *siec, *numery;
    cout << "Aby dopisac kontakt do swojej listy wcisnij 1" << endl;
    cout << "aby zobaczyc liste kontaktow wcisnij 2" << endl;
    cin >> wybor;
    switch(wybor)
    {//otwieram switch
        case 1:
        {//otwieram case 1
            cout << "Podaj ilosc osob:" << endl;
            cin >> IloscOsob;
            nazwy = new string[IloscOsob];
            numery = new string[IloscOsob];
            siec = new string[IloscOsob];
            if (IloscOsob < 1)
            {//otwieram if
                cout << "Za malo osob." << endl;
                system("pause");
                return 0;
            }//zamykam if
            for (int nr = 0; nr < IloscOsob; nr++)
            {//otwieram for
                cout << "\nOsoba " << nr+1 << ":" << endl;
                cout << "Imie: " << endl;
                cin >> nazwy[nr];
                cout << "Siec: " << endl;
                cin >> siec[nr];
                cout << "Nr telefonu: " << endl;
                cin >> numery[nr];
            }//zamykam for
            ofstream plik("kontakty.txt", ios::app);
            for (b; b < IloscOsob; b++)
            {//otwieram for
                cout << "\nImie: " << nazwy[b] << "   Siec: " << siec[b] << "   Nr telefonu: " << numery[b] << endl;
                plik << "\nImie: " << nazwy[b] << "   Siec: " << siec[b] << "   Nr telefonu: " << numery[b] << endl;
            }//zamykam for
            plik.close();
            goto startq;
        }//zamykam case 1
        break;
        case 2:
        {//otwieram case2
            fstream plik;
            plik.open("nazwa_pliku.txt",ios::in|ios::out);
            if(plik.good()==true)
            {//otwieram if
                for (b; b < IloscOsob; b++)
                {//otwieram for
                    cout << "Moje kontakty:" << endl;
                    cout << "Imie: " << nazwy[b] << "   Siec: " << siec[b] << "   Nr telefonu: " << numery[b] << endl;
                }//zamykam for
                plik.close();
            }//zamykam if
        else cout << "Dostep do pliku zostal zabroniony!" << endl;
        }//zamykam case 2 
        break;  
        default:
        cout<<"Opcja "<<wybor<<" nie istnieje!"<<endl;
    }//zamykam switch
    delete [] nazwy;
    delete [] siec;
    delete [] numery;
    system("pause");
    return 0;
}//zamykam nie wiem co

Teraz tylko nie wczytuje danych po wciśnięciu 2. Nie umiem tego wytłumaczyć. Proszę o pomoc!

0

Może to ktoś naprawić?!

0

Najpierw poucz się bardziej podstawowych podstaw. Łażeniem po plikach pobaw się później. Ale jeśli tak chcesz błędy to:
- Gdzie coś pobierasz z pliku?
- Jeśli myślisz, że te rzeczy zostają automatycznie pobranie do numery, nazwy i siec - mylisz się.

1 użytkowników online, w tym zalogowanych: 0, gości: 1