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

Dlaczego wyświetla tylko jeden plik mimo pętli?

Object Storage Arubacloud
0 głosów
405 wizyt
pytanie zadane 10 czerwca 2018 w C i C++ przez WhiteDragon Początkujący (290 p.)

Mam wprowadzić do pliku tekstowego imię,nazwisko,potem je zapisać w nim i na koniec wyświetlić. Tylko mimo,że w pliku jest już kilka wpisanych danych nie wyświetlają się,wyświetla tylko te ,które wpisuję podczas wykonywania programu. Mi wydaję się,że wszystko jest dobrze i nie widzę błędów. Przecież pętla while ma się wykonywać aż do skończenia się linii w dokumencie. Może ktoś coś zauważy?

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include<Windows.h>
using namespace std;

class Dane
{
public:
	string imie, nazwisko;
	void czytaj_dane_z_klawiatury()
	{
	
		cout << "Podaj imie:" ;  cin >> imie;
		cout << "Podaj nazwisko:"; cin >> nazwisko;

	}
	void zapisz_dane_do_pliku ()
	{
		cout << "Zapizuje dane w pliku" << endl;
		ofstream plik_zapis;
		plik_zapis.open("plik_tekstowy.txt",ios::out|ios::app); //otwiera ;
		plik_zapis << imie << endl;
		plik_zapis << nazwisko << endl;
		plik_zapis.close();
	}
	void czytaj_dane_z_pliku()
	{
		cout << "Odczyt danych z pliku." << endl;
		ifstream plik_odczyt;
		plik_odczyt.open(" plik_tekstowy",ios::in); // otwieramy plik, ktory juz istnieje
		string linia;
		int nr_linii = 1;
		while (getline(plik_odczyt, linia))
		{
			switch (nr_linii)
			{
			case 1:imie = linia; break;
			case 2:nazwisko = linia; break;
			}
			nr_linii++;
		}
		 plik_odczyt.close(); // zamykamy plik

		 cout << imie << " " << nazwisko << " ";
	}


	Dane();
};
Dane::Dane()
{

};

int main()
{
	Dane dane = Dane();
	dane.czytaj_dane_z_klawiatury();
	dane.zapisz_dane_do_pliku();
	dane.czytaj_dane_z_pliku();

	system("Pause");

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 10 czerwca 2018 przez rafal.budzis Szeryf (85,260 p.)
Wyświetlasz dane juz poza pętlą. W tej chwili w pętli zapisujesz dane tylko dla lini numer 1 i numer dwa (innych nie masz przewidzianych w case) a gdy pętla się skończy wyświetlasz dane z lini jeden i dwa.

Najłatwiej w pętli dodać cout<<linia; a zapis zmienić aby imię i nazwisko były w tej samej lini ;)
komentarz 10 czerwca 2018 przez WhiteDragon Początkujący (290 p.)
	while (getline(plik_odczyt, linia))
		{
			switch (nr_linii)
			{
			case 1:imie = linia; break;
			case 2:nazwisko = linia; break;
				cout << linia;
			}
			nr_linii++;
		}

W sensie zamiast tego switch,case dać coutem imię i nazwisko w jednej linii a potem cout<<linia; ? Dobrze to rozumiem?

0 głosów
odpowiedź 10 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)

Nie używasz windows.h :P

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include<Windows.h>  //błędny include
using namespace std;

 

komentarz 14 czerwca 2018 przez WhiteDragon Początkujący (290 p.)

Dzięki za spostrzegawczość smiley  ale problem nie znikł,dalej pokazuje tylko jedno imie i nazwisko-aktualnie wpisane. Reszta,która się tam zapisała to już nie. Może ty mi poradzisz co zrobić z tą pętlą?

komentarz 14 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
24 linia, usuń IOS::out , zostaw tylko app

Przy zapisie piszesz ofstream a przy odczycie ifstream , a nie powinno być czasem fstream zapisz_plik i fstream odczyt_pliku
komentarz 14 czerwca 2018 przez WhiteDragon Początkujący (290 p.)
W przykładzie od wykładowcy było tak jak jest napisane,pluz w kursie obiektowym Zelenta tak samo to nie wiem....

Po poprawce w 24 linii dalej to samo....
komentarz 15 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
Zelent stosuje fstream, a nie ofstream
komentarz 15 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
Linia 22 , "zapizuje do pliku  tak?"
komentarz 15 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
Linia 65, system pause?!?!?, Nie lepiej getchar?
komentarz 15 czerwca 2018 przez WhiteDragon Początkujący (290 p.)
getchar wywala mi błędy,poza tym bardziej lubię system pause. Tak-linia 22 zapisuje. Mimo poprawienia tego nieszczęsnego ofstream i ifstream na fstream to dalej to samo....
komentarz 16 czerwca 2018 przez MsMaciek123 Pasjonat (24,760 p.)

22 linia, komentarz "zapi​​​z​​​​uje" a nie czasem "zapi​​​s​uje"??

Ymm... Jak getchar wywala błędy, to getline też by wywalał. Spróbuj dać std::getchar i w getline daj std::getline , wiem że masz using namespace std, ale to nie zaszkodzi spróbować.

33 linia , jak zapisujesz plik "plik.txt" to go wczytaj "plik.txt" a nie " plik.txt"

40 i 41 linia, case 1:imie=..., Nie powinno być czasem "case 1: imie=..."

 

Pozwól że zacytuję

Tylko mimo,że w pliku jest już kilka wpisanych danych nie wyświetlają się,wyświetla tylko te ,które wpisuję podczas wykonywania programu

No bo jak odpalasz program to na nowo je zapisujesz, i te nowe zostaną odczytane.

 

 Przy odczycie zrób jeszcze dwie zmienne imie2 i nazwisko2 i do nich wczytaj dane, i te dane wyświetl, sprawdź czy plik istnieje, metodą Good, wtedy dowiesz się czy dobrze otwiera się plik, bo to nie jest tylko na istnienie pliku, lecz na całe otwarcie, typu:

Jak go nie będzie na dysku

Jak będzie zajerty przez inny program itd

 

Podobne pytania

0 głosów
0 odpowiedzi 126 wizyt
pytanie zadane 7 lipca 2022 w C i C++ przez tymek112 Obywatel (1,530 p.)
0 głosów
2 odpowiedzi 331 wizyt
pytanie zadane 14 października 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 222 wizyt

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...