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

[Poziom 4 Lekcja 34] Zadanie lekko tuningowane - Zawieszenie programu po wczytaniu mix'a liter ze znakami.

Ostatnio zmodyfikowano 2014-01-08 20:18
Autor Wiadomość
Krump
Temat założony przez niniejszego użytkownika
» 2013-12-29 17:34:56
Zobacz ten dzisiejszy, bo on prawie działa (źle mi się wkleił już jest dobry).

A pierwszy kod to ten z poprawkami DejaVu
C/C++
#include <iostream> //1 a 2 55
#include <fstream> //1 d 2 3
#include <stdlib.h> //2 3 132 87
#include <string> //2d3 2 4
#include <conio.h> //a d
//5
using namespace std;

bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik )
{
    char cZnak;
    for(;; )
    {
        plik.clear();
        cZnak = plik.peek();
        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;
       
    }
}

bool czyNapotkanoZnakSpacji( std::ifstream & plik )
{
    char cZnak;
    for(;; )
    {
        plik.clear();
        cZnak = plik.peek();
        if( plik.fail() || plik.bad() )
             return false;
       
        if( !isspace( cZnak ) )
             return false;
       
        plik.get( cZnak );
        if( plik.fail() || plik.bad() )
             return false;
       
        if( cZnak == ' ' )
             return true;
       
    }
};

int main( int argc, char ** argv )
{
    ifstream plik;
    int suma = 0, wiersz = 1, liczba = 0, suma_bledow = 0;
    plik.open( "text.txt" );
    if( !plik.good() )
    {
        cout << "Nie udalo sie otworzyc pliku :/ ";
        getch();
        return false;
    }
    /*while( !plik.eof() )
    {
    char znak = plik.peek();
    if( ( znak >= '0' ) && ( znak <= '9') )
    {
    plik >> liczba;
    suma += liczba;
    }
    else
    //if( plik.fail() )
    {
    //plik.clear();
    //liczba = 0;
    suma_bledow++;
    while( !czyNapotkanoZnakSpacji( plik ) )
    {
    if( !czyNapotkanoZnakNowegoWiersza( plik ) )
    plik.get();
    else
    break;
    }
    if( plik.fail() )
    {
    plik.clear();
    plik.sync();
    }
    }
    cout << liczba << " ";
    if( czyNapotkanoZnakNowegoWiersza( plik ) )
    {
    cout << "Suma liczb w " << wiersz << " wierszu to: " << suma << " Liczba bledow to: " << suma_bledow << endl;
    suma = 0;
    wiersz++;
    suma_bledow = 0;
    }
    }*/
    while( !plik.eof() )
    {
        if( czyNapotkanoZnakNowegoWiersza( plik ) )
        {
            cout << "Suma liczb w " << wiersz << " wierszu to: " << suma << " Liczba bledow to: " << suma_bledow << endl;
            suma_bledow = suma = 0;
            wiersz++;
        }
        else
        {
            plik.clear();
            if( plik >> liczba )
            {
                suma += liczba;
            }
            else
            {
                suma_bledow++;
                plik.clear();
                plik.get();
            } //else
        } //else
    } //while
    plik.close(); // tu był blad, a rczej tego w ogóle nie było!
    getch();
    return 0;
}

Co nie działa:
Jak mamy w pliku linijkę: 2d3 2 4, to sumuje liczby, czyli jest 11 i błędów jeden. A powinien dać sumę 6 i błąd 1, bo 2d3 to jeden wyraz, np. liczba w heksadecymalnym.
Nie sprawdza ostatniej linijki w pliku.
P-100549
Krump
Temat założony przez niniejszego użytkownika
» 2014-01-03 12:14:59
Ja tak tylko się przypomnieć.
P-101012
pekfos
» 2014-01-03 15:42:46
Jeśli udaje się wczytać, sprawdzaj, czy dalej stoi biały znak. Jeśli nie udaje się, czyść do białego znaku.
P-101041
Krump
Temat założony przez niniejszego użytkownika
» 2014-01-08 18:58:23
Znaczy tym peek'iem? Tak jak zrobiłem w jednym z kodów?
P-101616
pekfos
» 2014-01-08 20:18:43
Podobnie.
P-101631
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4