Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poziom 4 lekcja 33 wczytywanie danych z pliku operatorem >>

Ostatnio zmodyfikowano 2017-02-06 14:29
Autor Wiadomość
Damfled
Temat założony przez niniejszego użytkownika
Poziom 4 lekcja 33 wczytywanie danych z pliku operatorem >>
» 2017-01-28 17:13:20
Dlaczego nie wczytuje ostatniego działania ( tutaj z przykładowego programu z tej lekcji ) oraz ostatniej liczby z zadania domowego?
Nie ważne czy napiszę 1 2 3 4 5 6 7 8 9 10 czy bez 10 ostatniej liczby mi nie wypisuje i nie sumuje lub może pomija w sumie wyświetliło puste zdanie przed zakończeniem w przykładzie.
P-157063
mateczek
» 2017-01-28 17:20:31
wklej swój kod na forum  albo poszukaj wróżbity:P
P-157064
Damfled
Temat założony przez niniejszego użytkownika
» 2017-01-28 17:31:54
No cóż przykładowy program jest widoczny cały czas. :)
Niżej mój kod. W pliku dane.txt są wpisane liczby 1 2 3 4 5 6 7 8 9 10
C/C++
#include <iostream>
#include <fstream>
#include <string>

void wypiszLiczbe( int liczba )
{
    std::cout << liczba << ", ";
}

bool otworzPlik( std::string nazwaPliku )
{
    std::ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
         return false;
   
    int liczba;
    int suma = 0;
    while( true )
    {
        plik >> liczba;
        if( plik.good() )
        {
            wypiszLiczbe( liczba );
            suma += liczba;
        }
       
        else
        {
            std::cout << std::endl;
            std::cout << suma;
            break;
        }
    }
   
    return true;
}
int main()
{
   
   
    if( !otworzPlik( "dane.txt" ) )
         std::cout << "Nie udalo sie otworzyc pliku!" << std::endl;
   
   
    return 0;
}
P-157065
mateczek
» 2017-01-28 18:26:59
C/C++
#include <iostream>
#include <fstream>
#include <string>

void wypiszLiczbe( int liczba )
{
    std::cout << liczba << ", ";
}

bool otworzPlik( std::string nazwaPliku )
{
    std::ifstream plik( nazwaPliku );
    // plik.open( nazwaPliku.c_str() ); // da się obejść
    if( !plik )
         return false;
   
    int liczba;
    int suma = 0;
    while( plik >> liczba ) // ja zawsze czytam tak
    {
        wypiszLiczbe( liczba );
        suma += liczba;
    }
    std::cout << std::endl;
    std::cout << suma;
    return true;
}
int main()
{
   
   
    if( !otworzPlik( "dane.txt" ) )
         std::cout << "Nie udalo sie otworzyc pliku!" << std::endl;
   
   
    return 0;
}


możesz też zmienić warunek testując flagę błędu pliku
C/C++
plik >> liczba;
if( !plik.fail() ) { }
//lub inaczej
plik >> liczba;
if( plik ) {
    //ok
}
P-157068
Damfled
Temat założony przez niniejszego użytkownika
» 2017-02-02 15:10:40
Poziom 4, lekcja 34 Wczytywanie zawartości pliku, a kontrola błędów.
Robiąc drugie zadanie napotkałem błąd. :)
Po naciśnięciu ctrl + F9 odpala się z folderu codeblocks plik o nazwie ios_base.h no i wyświetla tam błąd.
Kod który póki co napisałem:
C/C++
#include <iostream>
#include <fstream>
#include <string>

bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik )
{
    char cZnak;
    for(;; )
    {
        plik.clear();
        cZnak = plik.peek(); //ta cała funkcja jest z tematu który podałem na początku
        if( plik.fail() || plik.bad() )
             return false;
       
        if( !isspace( cZnak ) )
             return false;
       
        plik.get( cZnak );
        if( plik.fail() || plik.bad() )
             return false;
       
        if( cZnak == '\n' )
             return true;
       
    } //for
}

bool wczytajLiczbe( std::ifstream plik, int & suma )
{
    int liczba;
    plik.clear();
    plik >> liczba;
    if( plik.bad() )
    {
        plik.close();
        return false;
    } else
    if( plik.fail() )
    {
       
        return false;
    }
    else
         std::cout << liczba << ", ";
   
    suma += liczba;
   
    return true;
}
bool otworzPlik( std::string nazwaPliku )
{
    std::ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
         std::cout << "Nie udalo sie otworzyc pliku!" << std::endl;
   
    int suma = 0;
    while( !plik.eof() )
    {
        wczytajLiczbe( plik, suma );
        if( czyNapotkanoZnakNowegoWiersza( plik ) == true );
       
        {
            std::cout << suma << std::endl;
        }
       
       
       
    }
   
    plik.close();
    return true;
}

int main()
{
    otworzPlik( "dane.txt" );
   
    return 0;
}
P-157230
michal11
» 2017-02-02 16:39:17
Skoro jakiś błąd ci się wyświetla to wypadałoby go tu wkleić żebyśmy wiedzieli o co chodzi.
P-157236
Damfled
Temat założony przez niniejszego użytkownika
» 2017-02-03 10:07:30
Build log:

mingw32-g++.exe -Wall  -c F:\Dane\C++\-.cpp -o F:\Dane\C++\-.o
In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:42:0,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from F:\Dane\C++\-.cpp:1:
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ios_base.h: In copy constructor 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)':
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ios_base.h:786:5: error: 'std::ios_base::ios_base(const std::ios_base&)' is private
     ios_base(const ios_base&);
     ^
In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:44:0,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from F:\Dane\C++\-.cpp:1:
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basic_ios.h:66:11: error: within this context
     class basic_ios : public ios_base
           ^
In file included from F:\Dane\C++\-.cpp:2:0:
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)':
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:427:11: note: synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here
     class basic_ifstream : public basic_istream<_CharT, _Traits>
           ^
In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:43:0,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from F:\Dane\C++\-.cpp:1:
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\streambuf: In copy constructor 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)':
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\streambuf:802:7: error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is private
       basic_streambuf(const basic_streambuf& __sb)
       ^
In file included from F:\Dane\C++\-.cpp:2:0:
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:72:11: error: within this context
     class basic_filebuf : public basic_streambuf<_CharT, _Traits>
           ^
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)':
h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:427:11: note: synthesized method 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here
     class basic_ifstream : public basic_istream<_CharT, _Traits>
           ^
F:\Dane\C++\-.cpp: In function 'bool otworzPlik(std::string)':
F:\Dane\C++\-.cpp:58:35: note: synthesized method 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)' first required here
         wczytajLiczbe( plik, suma );
                                   ^
F:\Dane\C++\-.cpp:28:6: error:   initializing argument 1 of 'bool wczytajLiczbe(std::ifstream, int&)'
 bool wczytajLiczbe( std::ifstream plik, int & suma )
      ^
Process terminated with status 1 (0 minute(s), 0 second(s))
5 error(s), 0 warning(s) (0 minute(s), 0 second(s))
 
Dziwnie wygląda po dodaniu, mam nadzieję że o to chodzi. :)
P-157262
carlosmay
» 2017-02-03 10:56:35
Obiekt strumienia plikowego daj przez referencje, ponieważ ma usunięty konstruktor kopiujący, albo jest on prywatny (na jedno wychodzi).
Wypadałoby coś zwrócić, na wypadek błędu otwarcia pliku.
P-157266
« 1 » 2
  Strona 1 z 2 Następna strona