• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z funkcją w c++

VPS Starter Arubacloud
0 głosów
148 wizyt
pytanie zadane 28 września 2019 w C i C++ przez CandyyPL Nowicjusz (120 p.)

Witam, proszę o pomoc. Napisałem funkcję w c++ i nie działa. Problem jest głównie w lini "string line[lines];"

void fileRead(string filename, int lines) {
	fstream file;

	file.open(filename, ios::in);
	if (file.good() == false) {
		cout << "File is broken or missing!";
	}
	else {
		string line[lines];
		int lineNum = 1;

		for (int i = 1; i <= lines; i++) {
			while (getline(file, line)) {
				lines[i] = line;
			}
			lineNum++;
		}
	}
}

 

2 odpowiedzi

+1 głos
odpowiedź 28 września 2019 przez mokrowski Mędrzec (155,460 p.)
Problem jest taki że C++ nie obsługuje VLA.

 https://en.m.wikipedia.org/wiki/Variable-length_array
komentarz 28 września 2019 przez CandyyPL Nowicjusz (120 p.)
Mógłbyś wyłumaczyć co to jest i czy można coś zrobić aby ta funkcja działała?
komentarz 28 września 2019 przez mokrowski Mędrzec (155,460 p.)

W trybie małych poprawek:

void fileRead(const string& filename, size_t lines) {
    ifstream file(filename);

    if (!file) {
        cerr << "File is broken or missing!";
    } else {
        vector<string> line;
        line.reserve(lines);

        for (int i = 0; i < lines; ++i) {
            while (getline(file, line)) {
                line.emplace_back(line);
            }
        }
    }
}

 

+1 głos
odpowiedź 28 września 2019 przez gagyn Stary wyjadacz (11,050 p.)

Musisz zadeklarować tą tablicę line w sposób dynamiczny, a nie statyczny.

http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307

https://www.p-programowanie.pl/cpp/tablice-dynamiczne/

Poza tym zmienna lineNum u Ciebie nic nie robi.

while (getline(file, line)) {
   lines[i] = line;
 }

Ta pętla też nie ma sensu, ponieważ wczytujesz cały czas do tej samej komórki nadpisując poprzednie linie.

komentarz 28 września 2019 przez tkz Nałogowiec (42,000 p.)
Oczywiście, że nie w ten sposób. Od tego jest vector, albo array, albo dynamiczne wskaźniki.
komentarz 28 września 2019 przez gagyn Stary wyjadacz (11,050 p.)
komentarz 28 września 2019 przez CandyyPL Nowicjusz (120 p.)

@gagyn, Akurat ta pętla (mam na myśli pętle for) ma sens, bo od niej zależy do jakiej "szufladki" w tablicy, zostanie zapisana zawartość zmiennej line. Ale dziękuję za odpowiedź

komentarz 28 września 2019 przez gagyn Stary wyjadacz (11,050 p.)

Ta pętla for jak najbardziej ma sens, ale chodzi mi o while, który sensu nie ma.

komentarz 28 września 2019 przez gagyn Stary wyjadacz (11,050 p.)

Poza tym, jak skorzystasz z vectora, to nie będziesz musiał się przejmować do której komórki wstawić nową linię, tylko użyjesz .push_back(linia) i nowa linia zostanie wstawiona na koniec.

Podobne pytania

0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)
0 głosów
2 odpowiedzi 543 wizyt
pytanie zadane 3 lutego 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)
0 głosów
3 odpowiedzi 212 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...