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

Problem z funkcją w c++

0 głosów
430 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 (158,960 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 (158,960 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,040 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ź 973 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)
0 głosów
2 odpowiedzi 1,113 wizyt
pytanie zadane 3 lutego 2018 w C i C++ przez mn130496 Gaduła (3,640 p.)
0 głosów
3 odpowiedzi 450 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...