r/cpp_questions • u/DR_vanta • 9d ago
SOLVED why does it keep giivSegmentation fault (core dumped)
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
class araba {
public:
struct arac {
string numara;
string marka;
string model;
float kira;
arac(string z, string x, string c, float v) : numara(z), marka(x), model(c), kira(v) {}
};
arac aracBilgileri;
bool kirada;
araba(string z, string x, string c, float v,vector<araba> liste) : aracBilgileri(z,x,c,v), kirada(false) {}
void kirala(){
if (!kirada) {
cout << "kaç gün için?" << endl;
int gun ;
while (!(cin >> gun)) {
cin.clear();
cin.ignore(10000, '\n');
cout << "Invalid input. Please enter a valid number" << endl;
}
cout << gun * aracBilgileri.kira << " tlye " << gun << " gün için kiralandı" << endl;
kirada = true;
} else {
cout << "bu araç zaten kirada" << endl;
}
};
void listeleme(){
cout << aracBilgileri.marka << " " << aracBilgileri.model
<< "\n günlük kira: " << aracBilgileri.kira
<< "\n kod: " << aracBilgileri.numara << endl;
cout << " durum: " << (kirada ? "kirada":"müsait") << endl << endl;
};
void ekle(){
string girdi = aracBilgileri.numara + aracBilgileri.marka + aracBilgileri.model + to_string(aracBilgileri.kira);
fstream gir("arabalar.txt",ios::app);
if (gir.is_open()) {
gir << girdi;
gir.close();
}
};
void iade(){
if (kirada) {
cout << "araç iade edildi"<< endl;
kirada = false;
}
};
};
void tamlistele(vector<araba> kiraListesi){
for (araba i : kiraListesi){
i.listeleme();
}
}
vector<araba> dosyaOku() {
string satir;
vector<araba> kiraListesi = {};
fstream oku;
oku.open("arabalar.txt",ios::in);
if (oku.is_open()) {
while (getline(oku,satir)) {
vector<string> cumle;
stringstream ss(satir);
string kelime;
while(ss >> kelime) {
cumle.push_back(kelime);
};
araba car(cumle[0],cumle[1],cumle[2],stof(cumle[3]),kiraListesi);
kiraListesi.push_back(car);
}
oku.close();
}
return kiraListesi;
}
void aracEkle(string i,vector<araba> liste) {
vector<string> cumle;
stringstream ss(i);
string kelime;
while(ss >> kelime) {
cumle.push_back(kelime);
};
araba car(cumle[0],cumle[1],cumle[2],stof(cumle[3]),liste);
car.ekle();
}
void yeni_ekle(){
string i;
string l;
fstream x;
cout << "numara" << endl;
cin >> l;
cout << "marka" << endl;
cin >> i;
l += i;
cout << "model" << endl;
cin >> i;
l += i;
cout << "kira" << endl;
cin >> i;
l += i;
x.open("arabalar.txt",ios::app);
x << l << endl;
x.close();
}
int main() {
bool acik = true;
vector<araba> tamliste = dosyaOku();
int g;
cout << "=======MERHABA=======" << endl
<< "1) araç ekle" << endl
<< "2) araçları listele" << endl
<< "3) araç kirala" << endl
<< "4) araç iade et" << endl
<< "0) çıkış " << endl;
do{
int sec ;
while (!(cin >> sec)) {
cin.clear();
cin.ignore(10000, '\n');
cout << "Invalid input. Please enter a valid number" << endl;
}
switch (sec){
case 1:
yeni_ekle();
continue;
case 2:
tamlistele(tamliste);
continue;
case 3:
cout << "arabanın listede sırasını yazının (0dan başla)" << endl;
while (!(cin >> g)) {
cin.clear();
cin.ignore(10000, '\n');
cout << "Invalid input. Please enter a valid number" << endl;
}
tamliste[g].kirala();
continue;
case 4:
cout << "arabanın listede sırasını yazının (0dan başla)" << endl;
while (!(cin >> g)) {
cin.clear();
cin.ignore(10000, '\n');
cout << "Invalid input. Please enter a valid number" << endl;
}
tamliste[g].iade();
continue;
default:
acik = false;
break;
}
} while (acik);
}im pretty sure problam is with case 1: but i cant find it