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

Rozdział 33 - zadanie domowe.

Ostatnio zmodyfikowano 2013-08-01 21:27
Autor Wiadomość
Gogus-96
Temat założony przez niniejszego użytkownika
Rozdział 33 - zadanie domowe.
» 2013-08-01 16:06:17
Witam. Mam problem z działaniem mojego programu. Zarówno kompilator, jak i sam program błędu żadnego nie wykrywa (wnioskuję, że wykrywa plik tekstowy z liczbami), jednak nie wykonuje zadanego polecenia. Oto mój kod:
C/C++
#include <iostream>
#include <fstream>
#include <string>

void wykonajoperacje( int a, int b, int c )
{
    std::cout << a << "+" << b << "+" << c << "=" << a + b + c << std::endl;
}

bool wczytaj( std::string nazwa )
{
    std::ifstream plik;
    plik.open( nazwa.c_str() );
    if( !plik.good() )
         return false;
   
    while( true )
    {
        int a;
        int b;
        int c;
        plik >> a >> b >> c;
        if( plik.good() )
             wykonajoperacje( a, b, c );
        else
             break;
       
    }
    return true;
}

int main()
{
    if( !wczytaj( "Cyfry.txt" ) )
         std::cout << "Nie udalo sie wczytac danych." << std::endl;
   
    return 0;
}
Prosiłbym o pomoc, oraz z góry dziękuję.
P-89201
Monika90
» 2013-08-01 17:11:37
A co masz w pliku cyfry.txt?

Spróbuj zamienić to
C/C++
if( plik.good() )
     wykonajoperacje( a, b, c );
else
     break;

na
C/C++
if( plik )
     wykonajoperacje( a, b, c );
else
     break;

P-89207
c-plus-plus
» 2013-08-01 17:48:12
Jeszcze jedna uwaga co do stylu.

Nie deklarowałbym zmiennych w pętli while, ale raczej przed jej rozpoczęciem (a najlepiej na początku funkcji):

zamiast:
C/C++
bool wczytaj( std::string nazwa )
{
    std::ifstream plik;
    plik.open( nazwa.c_str() );
    if( !plik.good() )
         return false;
   
    while( true )
    {
        int a;
        int b;
        int c;


napisałbym raczej:

C/C++
bool wczytaj( std::string nazwa )
{
    int a, b, c;
   
    std::ifstream plik;
    plik.open( nazwa.c_str() );
    if( !plik.good() )
         return false;
   
    while( true )
    {
P-89210
Monika90
» 2013-08-01 18:19:58
Nie deklarowałbym zmiennych w pętli while, ale raczej przed jej rozpoczęciem (a najlepiej na początku funkcji)
A to dlaczego? Łatwiej się czyta kod, kiedy zmienne są zadeklarowane możliwie blisko swego użycia. W przypadku typów takich jak int, których konstrukcja i destrukcja nic nie kosztuje, jak najbardziej należy deklarować zmienne wewnątrz pętli, gdy tak jak tu, nie są one do niczego potrzebne ani przed pętlą ani po niej.
P-89214
Gogus-96
Temat założony przez niniejszego użytkownika
» 2013-08-01 21:27:00
W pliku cyfry.txt mam 9 5 1 zapisane w jednej linijce.
Monika90 Twoje rozwiązanie działa. Dziękuję.
P-89237
« 1 »
  Strona 1 z 1