problem z wczytywnaiem całego wiersza z pliku przy użyciu obiektu

0

Witam, piszę program(w VS 2015), który wczyta z pliku następujące dane: ilość darczyńców, imię nazwisko i kwota.

poniżej plik do wczytania i mój kod:

4
Sam Stone
2000
Fred Flass
100500
Tommy Tubbs
5000
Rich Raptor
55000
// zad_6_9.cpp -- zadanie 9 z rodzialu 6 - (123) -- wczytywanie z pliku do listy

#include <iostream>	//std::noskipws
#include <fstream>	//biblioteka wejscia-wyjscia - fstream
#include <cstdlib>	// exit ()
#include <string>	// oberacje na stringach

using namespace std;
int main()
{
	const int Size = 100;			// wielkosc tablicy z nazwa  pliku
	char filename[Size];			// tablica na nazwe pliku
	ifstream inFile;					// obiekt do odczytu danych z pliku

	
	cout << "Podaj nazwe pliku lub sciezke dostepu: ";
	cin.getline(filename, Size);	// wczytanie z konsoli nazwy pliku
	inFile.open(filename);			// powiazanie obiektu z plikiem

	if (!inFile.is_open())			// test poprawnosci otwarcia pliku
	{
		cout << "Otwieranie pliku " << filename << " nie powiodlo sie.\n";
		cout << "Program za chcwile zostanie zamkniety.";
		cin.get();
		cin.get();
		exit(EXIT_FAILURE);
	}
	else
		cout << "Plik zostal otwarty.\n";

	char word[81];			
	int amount;
	int n;

	inFile >> n;
	
	cout << "Twoja lista zawiera " << n << " darczyncow.\n";
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	for (int i = 0; i < n; i++)
	{
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		inFile.getline(word, 81 );                                                                                  // tu musi byc blad
		cout << word << " " ;
		
		inFile >> amount;
		cout << amount << " zl.";
	}


	inFile.close();
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	return 0;
}

program wczytuje ilość darczyńców, a potem chciałem wczytać imię i nazwisko komendą inFile.getline(word, 81) i wtedy dostaje jakieś śmieci.

Podaj nazwe pliku lub sciezke dostepu: konto.txt
Plik zostal otwarty.
Twoja lista zawiera 4 darczyncow.


 -858993460 zl.
 -858993460 zl.
 -858993460 zl.
 -858993460 zl.
2
cin.ignore(numeric_limits<streamsize>::max(), '\n');
inFile.getline(word, 81 );

Przecież wczytujesz ze strumienia inFile a nie cin, więc cin.ignore() zamień na inFile.ignore().

Z innej beczki: numeric_limits jest w nagłówku limits, więc warto mieć #include <limits> nawet jeśli dany kompilator niejawnie to dołącza.

0

Bardzo celna uwaga. Nie mniej dopiero zmiana.

cout << word << " " ;

na

cout << inFile.rdbuf() << endl;

pozwoliła na poprawne wyświetlanie danych z pliku.

2

Przecież

cout << inFile.rdbuf() << endl;

wypisuje wszystko z tego pliku, więc całe to formatowanie z nie będzie działać.

U mnie

inFile.ignore(numeric_limits<streamsize>::max(), '\n');
inFile.getline(word, 81);
cout << word << " " ;

bez problemu działało. Oczywiście tutaj:

cout << "Twoja lista zawiera " << n << " darczyncow.\n";
inFile.ignore(numeric_limits<streamsize>::max(), '\n');     // NIEEEEEEEEEE

nie powinno być inFile.ignore().

0
twonek napisał(a):
cout << "Twoja lista zawiera " << n << " darczyncow.\n";
inFile.ignore(numeric_limits<streamsize>::max(), '\n');     // NIEEEEEEEEEE

nie powinno być inFile.ignore().

Dlaczego ?
jest zbędne czy może mi usunąć ze strumienia danych jakieś ważne informacje ?

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