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

Problem z zadaniem z wczytywania danych z pliku.

Object Storage Arubacloud
0 głosów
729 wizyt
pytanie zadane 23 czerwca 2015 w C i C++ przez Mateusz Leonowicz Początkujący (310 p.)

Witam, otóż uczę się z książki Stephena Prata "Szkoła programowania C++" mam problem z zadaniem o treści: 
"Ponownie wykonaj ćwiczenie 6 ale tym razem informacje mają być odczytywane z pliku. Pierwszy zapis w pliku to liczba donatorów dalej wiersze są ułożone parami: pierwszy wiersz pary zawiera nazwisko daroczyńcy, drugi zawiera wysokość wpłaty"
4
Sam Stone
10000
Freida Flass
10050
Tammy Tubbs
5000
Rich Raptor
55000


Treść zadania 6 : 
"Przygotuj program sledzacy wplywy na konto Towarzystwa na Rzecz Zachowania Dobrych Wplywow. Uzytkownik ma byc pytany o liczbe wplacajacych, a nastepnie ma prosic o podanie wplaty kazdego donatora. Informacje nalezy umiescic w dynamicznie alokowanej tablicy struktur. Kazda struktura ma miec dwa pola: tablice znakowa (lub obiekt klasy string) na nazwisko oraz pole typu double na kwote. Po odczytaniu wszystkich danych program ma pokazac nazwiska i wplaty wszystkich, ktorzy dali przynajmniej 10000. Lista ta ma miec naglowek Nasi Wspaniali Sponsorzy. Dalej program ma pokazac liste pozostalych ofiarodawcow, tym razem z naglowkiem Nasi Sponsorzy"

Link do tego co póki co zrobiłem: http://imgur.com/PlLGfHF

2 odpowiedzi

+1 głos
odpowiedź 24 czerwca 2015 przez criss Mędrzec (172,590 p.)
wybrane 24 czerwca 2015 przez Mateusz Leonowicz
 
Najlepsza

Czyli konkretnie z czym masz problem?
I dlaczego wrzuciłeś kod jako jpg? Strasznie utrudnia życie :|

Co do otwarcia pliku, nie podałeś trybu otwarcia. Czyli, w twoim przypadku, jako drugi argument funkcji plik.open() daj ios::in.
Co do tego operatora >>. Nic o tym nie wiem, rób to tak:

Stwórz pomocniczą zmienną string do wczytywania z pliku liczb:

string tmp;
getline(plik,tmp);
int liczba=atoi(tmp.c_str() );

Żeby mieć dostęp do atoi() - zamienia string na int - dołącz cstdlib. atoi przyjmuje "stringi" w postaci z C, dlatego pisze tmp.c_str() która zwraca string w postaci tablicy charów. Przepisałem twój kod i po takich zmiaanch - wszystko działa jak trza :)
A no i jak kolega na dole dopisał - nie zwolniłeś pamięci na koniec - delete pt;

Masz jeszcze mały błąd - w trzecim forze wypisze ci tylko osoby z wpłatą poniżej 10k, więc jeśli ktoś wrzucił równo 10.000, to w ogóle nie zostanie wyczytany :D

komentarz 24 czerwca 2015 przez Mateusz Leonowicz Początkujący (310 p.)
Nie sądziłem że ktoś tak szybko odpowie, dzięki bardzo. Mógłbyś mi jeszcze powiedzieć po co mam używać tego całego atoi ? W książce nie było o tym słowa o.O . PS nie pomyślałem o tym jpg, wybacz Ps2 mógłbyś pokazać kod w całości działający  :D ?
komentarz 24 czerwca 2015 przez criss Mędrzec (172,590 p.)
Tzn. wydaje mi sie że jest bezpieczniej. Nie sprawdzałem tego, ale jak użyjesz getline(), po raz pierwszy to on ci wczyta pierwszą linie. Czyli zamiast pierwszego nazwiska wczyta liczbe darczyńców. Jeśli się myle i wszystko działa tylko po dodaniu trybu otwarcia to super.
komentarz 24 czerwca 2015 przez criss Mędrzec (172,590 p.)
#include <cstdlib>
#include <fstream>
#include <iostream>

using namespace std;

struct dotacje{
string nazw;
int kwota;
};

int main(){

fstream plik;
int liczba;
string tmp;
plik.open("dotacje.txt",ios::in);

getline(plik,tmp);
liczba=atoi(tmp.c_str());
dotacje* pt = new dotacje[liczba];

for(short i=0; i<liczba; i++){
         getline(plik,pt[i].nazw);
         getline(plik,tmp);
         pt[i].kwota=atoi(tmp.c_str());
}

cout<<"Sponsorzy: "<<endl;
for(short i=0; i<liczba; i++){
         if(pt[i].kwota>10000)cout<<pt[i].nazw<<": "<<pt[i].kwota<<endl;
}
plik.close();
delete pt;
return 0;
}

Już nie pisałem tego wypisywania reszty darczyncow, bo to nie ma znaczenia.

komentarz 24 czerwca 2015 przez Mateusz Leonowicz Początkujący (310 p.)
Dzięki bardzo :D. Nie sądzilem że ktoś o tej porze mi pomoże
0 głosów
odpowiedź 24 czerwca 2015 przez Wiciorny Ekspert (270,850 p.)
nie podałeś  trybu, jak kolega na dole sugeruje :) oraz ... tak dla poprawy, nie zwolniłeś pamięci na końcu ...

http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307    --- TO JEST BARDZO WAŻNE, aby pamiętać.

I w czym masz problem, co siędzieje po kompilacji ? itd. Sprecyzuj bracie !
komentarz 24 czerwca 2015 przez Mateusz Leonowicz Początkujący (310 p.)

Wyskakuje błąd https://imgur.com/JlTT1fF

Podobne pytania

+1 głos
2 odpowiedzi 212 wizyt
pytanie zadane 20 lutego 2017 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 607 wizyt
0 głosów
1 odpowiedź 619 wizyt

92,628 zapytań

141,491 odpowiedzi

319,862 komentarzy

62,010 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!

...