Skocz do zawartości

Wczytywanie danych z pliku do tablic


Civril

Polecane posty

Mam taki problem bo mam se wczytac (dobiero sie ucze) dane z pliku("liczby.txt") do tablic no i plik to ciag liczb "5 3 7 2 8 1 7 8 2". Program ma byc bardzo prosty bo ma je tylko wyswietlic no i tu mam problem napisalem program bylem pewien ze jest ok ale on wyswietla: "3538999"

Pomozcie powiedzcie co jest zle lub najlepiej poprawcie mij kod zrodlowy:

EDIT

Tamto jest kompletnie zle sam do tego doszlem napisalem drugi kod ale jak wlaczam program to wyswietlaja sie dziwne znaczki i komp piszczy

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int a;
char tab[10];
ifstream odczyt ("liczby.txt");
for (int i=0 ; i<10 ; ++i)
tab[i]= odczyt.get()-'0';
cout<<tab;
odczyt.close();
cin.ignore ();
cin. get ();
return 0;
}

Link do komentarza
Udostępnij na innych stronach

Odejmowanie od wyniku '0' służy do zmiany znaku cyfry na jego wartość. Sens to by to miało, gdyby tab był tablicą intów, a że nie jest, to zamieniasz zgrabne cyferki na jakieś znaczki, które mają kody ASCII 1,2,3,4,5 etc. Wbrew temu co by się mogło wydawać, kody znaków oznaczających cyfry są zupełnie inne. Poza tym, plik.txt ma znaków 17 - spacje też się liczą.

Czyli: usuń to "-'0'" i zmień wielkość tablicy oraz warunek wykonywania fora na 17. Ot i wsio.

Link do komentarza
Udostępnij na innych stronach

OK dzieki za pomoc a teraz mam troche inny problem.

Mam plik w nim sa liczby nieupozadkowane niemajace ze soba powiazan logicznych - w ogole nic wspolnego, naleza do zakresu od 1 do 1 000 000 czy jest jakis sposob zeby je wczytac do tablicy int? Bo musze na nich wykonywac operacje i musza byc to wartosci int.

No chyba ze da sie poruwnywac char?

Link do komentarza
Udostępnij na innych stronach

1.Char mieści jeden znak lub wartości całkowitoliczbowe od 0 do 255. Więc wartości z takiego zakresu można porównać

2.Poszukaj informacji na temat rzutowania

Ogólnie polecam tutorial Karola "Xiona" Kuczmarskiego - "Od zera do gier kodera" lub MSDN

Link do komentarza
Udostępnij na innych stronach

Rzutowanie chara na int, może dać nie oczekiwane rezultaty, jeżeli zastosujemy je do char [].

Łańcuchy znakowe na liczbę konwertuje się funkcjami atoi, atof. Odwrotnie itoa, ftoa.

Można też zrobić to bardziej obiektowo i zastosować klasę stringstream. Mniej więcej coś takiego:

std::string a = "123";
std::stringstream b;
b.str(a);
int liczba;
b >> liczba;

Link do komentarza
Udostępnij na innych stronach

A zamiast rzutowania, o wiele lepiej po prostu zrobić to co napisał wies.niak, czyli użycie strumienia. Po tym jak napiszesz odczyt.open("plik.txt") możesz korzystać z tego pliku dokładnie tak samo jak z cin. Ot po prostu robisz tak:

int a;
odczyt>>a;

I to wczyta z pliku do zmiennej a kolejną liczbę. To naprawdę o wiele wygodniejsze, prostsze i bezpieczniejsze.

I przy okazji, warto jeszcze pamiętać o czymś takim jak eof() - zwraca true, jeśli plik się już skończył (wczytałeś wszystko) lub false w przeciwnym wypadku.

Czyli do wczytania wszystkich liczb tworzysz taką pętelkę

while (!odczyt.eof())
   odczyt<<a;

Przy czym a oznacza tu dowolną zmienną typu int, może to być też po prostu kolejna komórka tablicy.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...