Problem z programem "Zapisywacz"

0

Mam taki problem, że chciałem napisać program któremu podajesz ilość osób i ich imiona i nr telefonu. Mam taki kod:

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

using namespace std;

int main()
{
    int nr = 0;
    string Nazwy[10];
    long TelNr[10];
    int IloscOsob;
    cout << "Podaj ilosc osob:" << endl;
    cin >> IloscOsob;
    if (IloscOsob < 1)
    {
        cout << "Za malo osob." << endl;
        system("pause");
        return 0;
    }
    if (IloscOsob > 10)
    {
        cout << "Nie za duzo?" << endl;
        system("pause");
        return 0;
    }
    for (int nr = 0; nr != IloscOsob; nr++)
    {

        cout << "\nOsoba " << nr+1 << ":" << endl;
        cin >> Nazwy[10];
        cout << "Nr telefonu:" << endl;
        cin >> TelNr[10];
    }
    ofstream Dane

    ("dane.txt", ios::app);
    for (int b = 0; b != IloscOsob; b++)
    {
        Dane << "\nOsoba " << nr+1 << ":" << Nazwy[10] << " Telefon:" << TelNr[10] << endl;
        cout << "\nOsoba " << nr+1 << ":" << Nazwy[10] << " Telefon:" << TelNr[10] << endl;
    }
    system("pause");
    Dane.close();
    return 0;
}

Niby działa, ale jak wpisze imię to wywala program. ;/

Problem chyba jest w tym

string Nazwy[10];
Dane << "\nOsoba " << nr+1 << ":" << Nazwy[10] << " Telefon:" << TelNr[10] << endl;
cout << "\nOsoba " << nr+1 << ":" << Nazwy[10] << " Telefon:" << TelNr[10] << endl;

Ale dokładnie nie wiem, weźcie coś poradźcie! xD

0

string Nazwy[10];
Ziomuś tłumacząc na Polski ten kawałek kodu oznacza: Zrób no mi tu dziesięcioelementową tablicę stringów ponumerowanych od zera.
Czyli masz: string0 string1 string2 string3 string4 string5 string6 string7 string8 string9

Gdzie widzisz 10 string (Nazwy[10])?

W pętli for ciągle masz Nazwy[10]. Na pierwszy rzut oka ma być Nazwy[nr]. To samo z NrTel i drugą pentlą.

0

Chodzi mi o to, żeby wyświetlało wszystkie osoby i ich nr.
@Edit
Ok podmieniłem [10] w pętlach na [nr]
ale mam jeszcze jeden problem z nr osób!

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

using namespace std;

int main()
{
    string *Nazwy, *numery;
    int IloscOsob;
    cout << "Podaj ilosc osob:" << "\n";
    cin >> IloscOsob;
    Nazwy = new string[IloscOsob];
    numery = new string[IloscOsob];
    if (IloscOsob < 1)
    {
        cout << "Za malo osob." << "\n";
        system("pause");
        return 0;
    }
    for (int nr = 0; nr < IloscOsob; nr++)
    {

        cout << "\nOsoba " << nr+1 << ":" << "\n";
        cin >> Nazwy[nr];
        cout << "Nr telefonu:" << "\n";
        cin >> numery[nr];
    }
    ofstream Dane("dane.txt", ios::app);
    for (int b = 0; b != IloscOsob; b++)
    {
        Dane << "\nOsoba " << nr+1 << ":" << Nazwy[b] << " Telefon:" << numery[b] << "\n";
        cout << "\nOsoba " << nr+1 << ":" << Nazwy[b] << " Telefon:" << numery[b] << "\n";
    }
    system("pause");
    Dane.close();
    delete [] Nazwy;
    delete [] numery;
    return 0;
}

Porównaj mód kod z twoim i wyciągnij wnioski. Masz jeszcze dużo do nauki :)

0

Blood w twoim kodzie też jest jakiś błąd ;/

0

Jeżeli już bazować na Twoim kodzie to:

  1. Brakuje nagłówka cstdlib - używasz system()
  2. W pierwszej pętli używasz zmiennej nr, a w drugiej b. Więc w drugiej pętli odnoś się do zmiennej b, a nie nr.
  3. Nie używaj funkcji system();
    Ja otrzymuję komunikat:
    sh: pause: nie znaleziono polecenia
    Więc nie jest to przenośny program. (linux ma cls)

http://fpaste.org/M8Oi/

0

yoel Dzięki za pomoc ;) Działa.

0

A teraz chciałem dodać menu switch case:

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

Coś znowu jest nie tak. Może ktoś poprawić błędy?!

0

To znowu nie tak, że nie wiesz czym jest instrukcja switch.

http://kursy.ddt.pl/?LessonId=8

0

yoel ale coś się zj*bało z int b. Weź coś poradź. Ty się na tym znasz xD

0

Zasięg zmiennych
http://skroc.pl/18f2

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