To, że program który podesłałeś wywala jest normalną rzeczą.
Wskaźnik, jest to adres na jakąś zmienną.
Jeżeli tworzysz adres to tak jakbyś stworzyła kuriera. Przypisując wartość 5 do *a to tak jakby nazwać kuriera piątką.
Kurier może wysłać piątkę do jakiejś zmiennej, ale sam nie może być piątką.
Rozwiązaniem twojego problemu jest:
#include <iostream>
using namespace std;
int main()
{
int zmienna; //tworzę zmienną która będzie miała określony adres (numer domu).
int *kurier = &zmienna; //tworzę kuriera i wskazuję mu adres (&) zmiennej (andes domu).
*kurier = 5; //Teraz przypisuję wartość nie do kuriera, ale do domu na który wskazuje, czyli w tym przypadku zmienna.
//Poniższa linijka jest nieprawidłowa, aby skompilować program musisz ją usunąć.
kurier = 5; //To jest przypisanie wartości kurierowi (wskaźnikowi) ale nie jest prawidłowe i nie działa, ponieważ występuje
//tutaj niezgodność typów. Liczba 5 jest int'em, a wskaźnik pomimo tego, że jest przedstawiony za pomocą liczb
//jest innym typem niż int, jest typem wskaźnikowym.
cout<<"dom: "<<zmienna<<endl;
cout<<"numer domu: "<<&zmienna<<endl;
cout<<"adres jaki posiada kurier: "<<kurier<<endl;
cout<<"wartość na którą wskazuje kurier: "<<*kurier<<endl;
return 0;
}
Mam nadzieję, że już wszystko jest dla ciebie zrozumiałe. Wskaźniki to trudny temat i trzeba z nim trochę popracować.
Dokładnie przeczytaj komentarze które tam napisałem
Poćwicz jeszcze odczyt z pliku.
Bez pliku, program mi działa.
Nie wiem co ty masz w typ pliku u siebie i ile masz tam linijek.
#include <iostream>
#include <fstream>
using namespace std;
string imie[3], telefon[3], miasto[3];
int main()
{
string linia;
int numer = 1;
int liczba = 1;
fstream plik;
plik.open("test.txt", ios::in);
if(!plik.is_open())
{
cout << "nie odnaleziono pliku" << endl;
return 1;
}
for(int i=0;plik.good(); i++)
{
getline(plik, linia);
imie[i] = linia;
getline(plik, linia);
telefon[i] = linia;
getline(plik, linia);
miasto[i] = linia;
}
for(int i=0; i<3; i++)
{
cout<<"imie[i]: "<<imie[i]<<endl;
cout<<"telefon[i]: "<<telefon[i]<<endl;
cout<<"miasto[i]: "<<miasto[i]<<endl;
}
plik.close();
return 0;
}
Program nie jest doskonały, bo działa prawidłowo tylko wtedy kiedy jest odpowiednia liczba linijek w pliku *.txt ale rozwiązanie tego problemu pozostawiam tobie.
Code::Blocks nie jest tu niczemu winny a twoje crashe są wynikiem błędnego podejścia do pisania programu i wąskiego zakresu wiedzy.
Odchudziłęm go do niezbędnego minimum, by znaleźć problem....i nie znalazłem
Od początku pisz program który nie będzie zawierać niepotrzebnych elementów.
Nie utrudniaj sobie życia, pisz jak najprościej się da
Ten switch to jest porażka, po co ci sprawdzać jaki wynik ma numer kiedy można zrobić łatwą, elegancja pętlę.
Poza tym zamiast tworzyć trzy tablice można stworzyć strukturę, która będzie zawierać po każdym z tych elementów i takich struktur stworzyć trzy.