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ść
pekfos
» 2013-12-26 20:43:43
Sprawdź? Tak dużo roboty nie ma, z przeniesieniem kawałka kodu w inne miejsce. I zmienieniem kilku nazw, jeśli chcesz poprawiać wszystko, o czym napisałem.
P-100239
Krump
Temat założony przez niniejszego użytkownika
» 2013-12-26 21:37:00
Kombinuje, ale dalej mi nie idzie. Program wczytuje liczbę 1d3 jako 1 potem d które traktuje jako błąd i się zawiesza. A powinien to razem wczytać i uznać jako błąd.

Nie wiem nie mogę sobie z tym poradzić, ciągle coś nie tak.
P-100247
pekfos
» 2013-12-26 22:36:56
Kod?
P-100261
Krump
Temat założony przez niniejszego użytkownika
» 2013-12-26 23:54:27
C/C++
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include <conio.h>

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 )
    {
        plik >> liczba;
        if( !czyNapotkanoZnakspacji( plik ) )
             plik.get();
       
        if( plik.fail() )
        {
            plik.clear();
            liczba = 0;
            suma_bledow++;
        }
        suma += liczba;
        if( liczba == 0 || czyNapotkanoZnakNowegoWiersza( plik ) || plik.eof() )
        {
           
            cout << "Suma liczb w " << wiersz << " wierszu to: " << suma << " Liczba bledow to: " << suma_bledow << endl;
            suma = 0;
            wiersz++;
            suma_bledow = 0;
        }
    }
    plik.close();
    getch();
    return 0;
}
P-100269
DejaVu
» 2013-12-27 08:53:15
C/C++
for(;; )
{
    plik >> liczba;
    if( plik.eof() )
         break;
   
    //... reszta kodu
}
P-100271
Krump
Temat założony przez niniejszego użytkownika
» 2013-12-27 14:05:17
Ale:
C/C++
for(;; )
{
    plik >> liczba;
    if( plik.eof() )
         break;
   
    //... reszta kodu
}
C/C++
while( !plik.eof() )
{
    plik >> liczba;
   
    //... reszta kodu
}
C/C++
while( plik )
{
    plik >> liczba;
   
    //... reszta kodu
}
To to samo przecież, czy źle myślę?

DejaVu nawet jeśli, zrobiłem tak jak poradziłeś, ale to nie rozwiązuje problemu z blokowaniu się programu na wyrazie 1d3. Zawsze używałem while() w pierwotnym programie i nigdy nie było problemu z zakańczaniem wczytywania danych.
P-100308
pekfos
» 2013-12-27 16:38:33
To to samo przecież, czy źle myślę?
Jeśli wywalić resztę kodu, to jest to, mniej więcej, to samo.

DejaVu nawet jeśli, zrobiłem tak jak poradziłeś, ale to nie rozwiązuje problemu z blokowaniu się programu na wyrazie 1d3.
Bo nie poprawiłeś reszty funkcji.
P-100320
Krump
Temat założony przez niniejszego użytkownika
» 2013-12-27 18:21:29
To jak to zrobić? Nie mogę sobie z tym poradzić już. Zanim napisałem tutaj męczyłem się parę dni z tym.
P-100344
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona