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

Odczytywanie danych z pliku txt i wprowadzanie ich do struktury

VPS Starter Arubacloud
+1 głos
3,474 wizyt
pytanie zadane 20 czerwca 2016 w C i C++ przez niezalogowany
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

ifstream file;
char napis;
const int SIZE = 10000;

struct nws
{
	string nazwisko;
	double kwota;
};

int main()
{
	file.open("tekst.txt");

	if (!file.is_open())
	{
		cout << "Plik nie istnieje";
		exit(EXIT_FAILURE);
	}

	int value;
	file >> value;
	nws *lista = new nws[value];

	    while (file.is_open())
		{
			for (int i = 0; i < value; i++)
			{
				getline(file, lista[i].nazwisko);
				(file >> lista[i].kwota).get();
			}
		}


	cout << "Nasi Wspaniali Sponsorzy" << endl;
	for (int j = 0; j < value; j++)
		if (lista[j].kwota >= SIZE) cout << lista[j].nazwisko << " " << lista[j].kwota << endl;

	cout << "Nasi Sponsorzy" << endl;
	for (int j = 0; j < value; j++)
		if (lista[j].kwota < SIZE) cout << lista[j].nazwisko << " " << lista[j].kwota << endl;

	if (file.eof())
		cout << " Koniec pliku!" << endl;
	else if (file.fail())
		cout << " Wczytywanie przerwane - blad!" << endl;
	else cout << " Wczytywanie danych przerwane, przyczyna nieznana!" << endl;

	delete[] lista;
	file.close();

	getchar(); getchar();
	
	return 0;
}

Dane z pliku tekstowego:

4
Sam Stone 
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor 
55000

Moim zadaniem jest odczytać dane z pliku i wyświetlić je w zależności od wpłaconej kwoty (wraz z nazwiskiem). Proszę od podpowiedź jak wprowadzić dane z pliku do struktury.

3 odpowiedzi

0 głosów
odpowiedź 20 czerwca 2016 przez criss Mędrzec (172,590 p.)

Nie wiem o co ci chodzi z tą pętlą while(file.is_open()) ... Nie wiem dlaczego wywołujesz metode get()... Pewnie ma to jakiś sens, ale ja nie wiem.

Poza tym whilem i tym get() (ktory wydaje mi sie - nie powinien jednak nic psuc) wszystko jest w porządku.

0 głosów
odpowiedź 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
edycja 20 czerwca 2016 przez Szahid

Wywal to co jest od  31 do 38 lini.

Stwórz licznik który będzie zliczał ile struktur zostało już wpełnionych ( ustaw go na 0)

Użyj pętli while gdzie warunkiem będą ( cin>>aws[licznik]->nazwisko and cin>>aws[licznik]->kwota and licznik<value)

Dawanie cin w warunku pętli to taki pro tip bo zawsze kiedy uda się wprowadzić to cin zwraca prawde. Nawet nie musisz stosować licznika ( w warunku pętli while)  bo kiedy dane się skończą to cin zwróci wartośc fałsz i pętla się przerwie. ( może to wyglądać tak 

 

while (cin>>aws[licznik]->nazwisko and cin>>aws[licznik]->kwota)
{ licznik++; }



 

Spróbuj to napisać sam a jak coś nie będzie grało to napisz w komentarzu to pomoge.

 

EDIT 

W sumie to już nie ma chyba w czym pomóc bo to o co pytałeś zostało rozwiązane ale nie analizowałem całwgo kodu 

0 głosów
odpowiedź 20 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
#include <fstream>

struct nws
{
    string nazwisko;
    double kwota;
    //Konstruktor domyślny (Potrzebny przy tworzeniu tablicy dynamicznej)
    nws(){;}
    //Jakiś konstruktor, żeby było łatwiej wprowadzić dane.
    nws(string n, double k):nazwisko(n),kwota(k){;}
};

int main()
{
...
   fstream file;
   file.open("dane.txt",ios::in);

   //Pierwsza linijka to ilość elementów.. pobieramy ja bez pętli
   int num;
   file>>num;
   nws *Tab = new nws[num];

   //Zmienne tymczasowe potrzebne do wprowadzenia danych do tablicy
      int counter=0;
      string tempNazwisko;
      double tempKwota;
   while(file.good())
   {
      //Imię i Nazwisko posiadają spacje dlatego używamy getline by pobrać całą linię (ze spacjami włącznie)
      getline(file,tempNazwisko);
      //Tu już możemy załadować kwotę zwykłym strumieniem
      file>>tempKwota;
      //Za pomocą konstruktora podmieniamy te elementy, które stworzyły się za pomocą konstruktora domyślnego () 
na te, które tworzymy już przy pomocy drugiego konstruktora.
      Tab[counter]=nws(tempNazwisko,tempKwota);
      counter++;
   }
...
}

Kod nietestowany (pisany na szybko), ale powinien działać.

komentarz 21 czerwca 2016 przez niezalogowany
Potrzebuje oddzielić kwoty większe i mniejsze od 10000 odczytane z pliku. Zrobiłbym to za pomocą tablic tylko muszę skorzystać z struktur, tylko że nie wiem jak wczytać dane z pliku do struktury (w sensie jaki kod napisać).
komentarz 22 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Kod, który napisałem powyżej wczytuje dane z pliku "dane.txt" (jakiś tam plik), który w założeniach wygląda tak jak ten twój. W wyniku końcowym programu w tablicy Tab (o wielkości podanej w pierwszym wierszu pliku) znajdują się struktury nws o różnych danych.. czyt. każda struktura ma odpowiednią kwotę i odpowiednie nazwisko tak jak po kolei jest w pliku. Nie wiem jak to wytłumaczyć jeszcze prościej.
4 <- To jest num
Sam Stone <- To jest Nazwisko w pierwszej strukturze (Tab[0].Nazwisko)
2000 <- To jest Kwota w pierwszej strukturze (Tab[0].Kwota)
Freida Flass <- To jest Nazwisko w drugiej strukturze (Tab[1].Nazwisko)
100500 <- To jest Kwota w drugiej strukturze (Tab[1].Kwota​)
Tammy Tubbs 
5000 
Rich Raptor  
55000

Podobne pytania

+1 głos
1 odpowiedź 3,170 wizyt
+1 głos
2 odpowiedzi 346 wizyt
pytanie zadane 8 sierpnia 2018 w C i C++ przez zendurix Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 1,670 wizyt
pytanie zadane 19 listopada 2017 w C i C++ przez edglrdmmslt Nowicjusz (120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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!

...