Łączenie stringów z tablic vector - cout nie wyświetla wszystkiego

0

Witam,

mam taki kod, że pobieram z plików imiona i nazwiska i wczytuje do osobnych tablic. Następnie losuje jakieś imie + jakieś nazwisko i chce to połączyć w cout, za pomocą + lub po prostu wypisując po sobie, niestety wyświetla się zawsze tylko nazwisko, tak jak by pierwszy ciąg był nadpisywany. Dlaczego i jak to obejść?

#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(){
	
	
	ifstream fileNames("names.txt", ifstream::binary);
	ifstream fileSurnames("surnames.txt", ifstream::binary);
	
	vector<string> names;
	vector<string> surnames;
	
	string line {};
	
	if(fileNames.is_open() && fileSurnames.is_open()){
		while(getline(fileNames, line))
			names.push_back(line);
	
		fileNames.close();
		
		while(getline(fileSurnames, line))
			surnames.push_back(line);
		
		fileSurnames.close();
	
	}else{
		cout << "Can't to open file" << endl;
	}

	srand(time(NULL));
		
	int index_Names = (rand() % (names.size() - 1));
	int index_Surnames = (rand() % (surnames.size() - 1));
	
	//cout << names[index_Names] << surnames[index_Surnames] << endl;
	cout << names[index_Names] + surnames[index_Surnames] << endl;
	
	return 0;
}
0

Co robi ta linijka?

string line {};
0
    int index_Names = (rand() % names.size());
    int index_Surnames = (rand() % surnames.size());
    cout << names[index_Names] << " " << surnames[index_Surnames] << endl;
0

@szweszwe wczytuje linię z pliku i wrzuca do tablicy vector bo pliki mam zdefiniowane tak, że każde imie i nazwisko w osobnej lini np.

Antek
Janek
Bartek

@_13th_Dragon
Po tej zmianie raz wyświetla imię + naziwsko, a raz tylko samo nazwisko ze spacją przed czyli podobnie jak wcześniej.

0

więc masz mało imion oraz zbędny pusty wiersz (lub kilka) na końcu pliku.

while(getline(fileNames,line)) if(line.size()) names.push_back(line);
0

Dziwna sprawa, moje pliki zawierają po 10 wpisów, nie ma w nich żadnych pustych lini, nawet zamiast txt zrobilem pliki z rozszerzeniem .bin bo czasami z txt różne dziwne rzeczy się dzieją i nadal to samo, dodałem tego ifa za pętlami while w celu sprawdzenia rozmiaru i wszystko działa poprawnie, wypisując obie tablice vector dostaję poprawną listę stringów. Czy to przypadkiem nie jest jakiś problem z coutem? Nie mam już pomysłu.
Jak zainicjuję do każdej z tablic na sztywno stringi to jest ok, po wczytaniu z plików jest dupa, ale czemu? Nie wiem, w wolnej chwili chyba wezmę do ręki debugger i to sprawdzę bo mnie to dręczy.

0

Obejrzyj swój plik w jakiejś przeglądarce binarnej i zobacz czym kończą ci się wiersze.
Lub odpal nie myśląc dos2unix

0

@_13th_Dragon dzięki. Potraktowanie plików dos2unix pomogło!

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