[c++]Czytanie z pliku.

0

Witam,
Potrzebuje napisac program ktory czyta z pliku.Znalazlem rozne texty na ten temat w internecie jednakze nic nie pomaga :(.Poradzcie co jest w programie nie tak.Na poczaatku wypelniam bufor zerami by nie znajdowaly sie w nim przypadkowe elementy.PLik1 to pik tekstowy zawierajacy uporzadkowane liczby oddzielone spacjami...

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream plik;
    char bufor[256];
    for(int i=0; i<256; i++)
    {
            bufor[i]=0;
    }
    plik.open("plik1");
    plik.getline(bufor, 256);
    for(int i=0; i<256; i++)
    {
       cout << bufor[i] << " ";
    }
    getchar();
}
0

Program jest poprawnie napisany. Jedyny błąd jaki wypatrzyłem to

plik.open("plik1");

Jeśli plik ma być tekstowy to powinien mieć rozszerzenie plik.open("plik1.txt");

0

Program jest ok, nie musi byc zadnego rozszerzenia, przeciez nie od tego zalezy czy to jest plik tekstowy, tylko od trybu otwarcia pliku (domyslny - takiego uzywasz - jest tekstowy wlasnie).

Ten kawalek kodu powinien wcytac liczby z plik do tablicy (swoja droga to musisz byc pewien tego, ze wczytywac liczby chcesz do tablicy char?):

int i = 0;
while(plik >> tablica[i++]);

Jesli w pliku jest wiecej niz 256 liczb to nie zmieszcza sie w tablicy i moze byc nieladnie. Pozdro

0

Po pierwsze jak otiwierasz strumien to go zamnknij, to taki ladny zwyczaj :)

Po drugie nie latwiej uzyc stringa zamiast tablicy znakow ( bo przeciez piszesz w c++ a nie c). Wtedy twoj programmoglby wygladac tak :

#include <iostream>
#include <fstream>
#include <string> 

using namespace std;

int main()
{
    ifstream plik;
    string napis;
    plik.open("plik.txt");
    getline( plik, napis);
    plik.close();
    cout << napis<<endl;
    system("pause");
}

I nie masz zabawy z ustawianiem zer.

pozdrawiam
Assassin.

0

Nie trzeba zamykac strumienia poniewaz destruktor sam to robi (no chyba ze musimy zamknac i otworzyc ponownie w celu ponownego odczytywania z inego pliku czy cos w tym stylu), jednak zgodze sie z tym ze zamykanie to raczej dobry zwyczaj.

0

Program jest ok, nie musi byc zadnego rozszerzenia, przeciez nie od tego zalezy czy to jest plik tekstowy, tylko od trybu otwarcia pliku (domyslny - takiego uzywasz - jest tekstowy wlasnie).

Jesli wyslij_sms chcial odczytac plik tekstowy (a tak pisal w swoim poscie), a jego plik przy otwarciu miał postac plik.open("plik"), to na pewno plik sie nie otworzy. Jesli plik jest z rozszerzeniem *.txt, to przy otwarciu pliku musisz podac takze to rozszerzenie.
Ali G sprawdz to za pomoca

if(!plik)
    {
    cout<<endl<<"Blad otwarcia pliku";
    getchar();
    return 0;
    }
</b>
0

Gege a sprawdzales czy to na pewno nie zadziala bo jakos u mnie w DEVie nie ma zadnego problemu i sie otwiera :)

Pozdrawiam
Assassin

0

Sprawdzalem w C++ Builderze 6 i jesli nie ma rozszerzenia i dam warunek if(!plik) ... to wyswietla sie moj komunikat. Czyli akurat tu rozszerzenie jest wazne.

0

Na pocieszeni moge dodac ze Dev jest w mnijeszoci, to znaczy ze w Visualu tez sie nie otwiera.

Assassin.

0

Mi nie chodzilo o to ze ma podawac nazwe pliku bez rozszerzenia, tylko o typ. Jesli mial napisane "plik", to mysle ze taki jest ten plik - bez rozszerzenia. Jesli plik ma jednak rozszerzenie to nie ma bata - nie pojdzie nigdzie - ani w Devie, ani Visualu, ani niczym innym.

0

Sprawdzalem w C++ Builderze 6 i jesli nie ma rozszerzenia i dam warunek if(!plik) ... to wyswietla sie moj komunikat. Czyli akurat tu rozszerzenie jest wazne.

Nie prawda. Rozszerzenie nie ma tu nic do rzeczy. polecenie open domyslnie otwiera plik w trybie tekstowym i nie ważne czy mam on rozszezenie dat, txt, czy jakie tam chcesz. oczywiscie jezeli plik nazywa sie tekst.txt lub tekst.dat to rozszerzenie to trzeba dodac, ale dlatego, ze jest to nazwa pliku, a nie dlatego ze ma to wplyw na tryb otwierania!

0

Mi nie chodzilo o to ze ma podawac nazwe pliku bez rozszerzenia, tylko o typ. Jesli mial napisane "plik", to mysle ze taki jest ten plik - bez rozszerzenia. Jesli plik ma jednak rozszerzenie to nie ma bata - nie pojdzie nigdzie - ani w Devie, ani Visualu, ani niczym innym.

ifstream plik; to nazwa zmiennej. Jej nazwa moze przyjmowac dowolna nazwe (oprocz zastrzerzonych), np. ifstream dlugopis</code>

0

Oj nie zrozumielismy sie. Ja piszac "plik" nie mialem na mysli zmiennej tylko nazwe pliku (nota bene "plik1" to poprawna nazwa).
Jesli plik otwierasz za pomoca konstruktora lub metody open i jako jedyny argument podajesz nazwe to domyslnym trybem jest tryb tekstowy (tak jak w tym przykladzie). Wiec jesli jego plik jest binarny(np. graficzny) to i tak otworzy go w trybie tekstowym, ale co wczyta do tablicy to juz inna sprawa. Co do rozszerzenia to przeciez to jest czesc nazwy pliku i oczywiste jest ze jesli podasz plik bez rozszerzenia jako argument to sie nie otworzy.

Poza tym mysle ze rozmowa schodzi nieco z tematu - nie o to chodzilo temu kto zalozyl ten topic.

0

Kurcze chlopaki wielkie dzieki - nawet nie zauwazylem ze napisaliscie tak wiele odpowiedzi potrzebowalem to na cwiczenia z infy - i wczoraj przez jakis czas nikt nic nie napisal a potem ja juz sie uczylem innych rzeczy :D ale wielkie dzeiki za jakiekolwiek odpowiedzi :):):)

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