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

Rozdział 34

Ostatnio zmodyfikowano 2018-04-20 11:32
Autor Wiadomość
Pawełek
Temat założony przez niniejszego użytkownika
Rozdział 34
» 2018-04-20 11:08:58
1. Napisz program, który wczyta z pliku liczby całkowite i wypisze je na ekranie. Wszelkie nieprawidłowe znaki mają zostać pominięte. Program ma wypisać również sumę wszystkich wczytanych liczb. Przykładowa zawartość pliku z danymi:
a 1 2 321b9 ac.de ef#@g 5 #3
Oczekiwane standardowe wyjście programu dla przykładowego zestawu danych:
1 2 321 9 5 3
Suma liczb wynosi: 341



Moja funkcja

C/C++
#include <iostream>
#include <fstream>
#include <string>

bool wczytajLiczbe( std::string nazwa, int tablica[] )
{
    std::ifstream plik; //tworzę obiekt
    plik.open( nazwa.c_str() ); //otwieram plik
    for( int a = 0; !plik.eof(); ) // zaczyna się pętla która ma na celu zapisanie wszystkich liczb całkowitych do tablicy, konczy się gdy metoda eof zróci prawdę z powodu końca pliku
    {
       
       
        plik >> tablica[ a ]; //próba zapisania liczby do tablicy
       
       
        if( plik.fail() ) //w przypadku gdy w pliku zostanie napotkana litera bądź znak proba się nie powiedzie,wtedy metoda fail zwroci prawdę
        { plik.clear(); // czyszczenie flag błędów
            return false; // w tym miejscu pętla się kończy i powinna wrócić do wersu 9 i zacząć się od nowa, debugger pokazał mi jednak że 'strzałka' w debuggerze wraca do wersu 7 (tworzenia obiektu) a następnie kończy się cała ta funkcja.
            //moje pytanie brzmi : dlaczego? (próbowałem zmienić nawet rodzaj funkcji z bool na int, niestety nie pomogło :/ )
        }
        else
        {
           
            std::cout << tablica[ a ] << " ";
            a++;
        }
    } plik.close();
   
    return true;
}

int suma( int tablica[], int wynik )
{
    wynik = 0;
    for( int b = 0; b < 5; b++ )
         wynik += tablica[ b ];
   
    std::cout << "Suma: " << wynik;
    return 0;
}

int main()
{ int tablica[ 6 ];
    int wynik;
    wczytajLiczbe( "zadanie.txt", tablica );
    suma( tablica, wynik );
    return 0;
   
}

Mam problem z moją pierwszą funkcją od góry, problem opisałem w komentarzach.
P-170762
pekfos
» 2018-04-20 11:22:03
return wychodzi z funkcji.
P-170763
Pawełek
Temat założony przez niniejszego użytkownika
» 2018-04-20 11:32:12
po usunięciu return, pętla jest nieskończona i metoda fail zawsze zwraca prawdę, co mam zrobić aby przy następnym powtórzeniu pętli, owa pętla pominęła pierwszą wartość pliku (pierwszą wartością jest litera co widać na załączonym zadaniu) i przeszła do drugiej wartości (drugą wartością jest już liczba a więc metoda fail zwróci fałsz)
P-170765
pekfos
» 2018-04-20 11:32:55
plik.ignore()
P-170766
« 1 »
  Strona 1 z 1