Bład wyniku

0

Witam napisałem program który pobiera z pliku liczby i zamienia je na liczby pierwsze(1 liczba na 1 linijke).
Program wyglada tak,ze odczytuje liczbe sprawdzam czy to jest liczba jak tak to wykonuje działanie jak nie to wypisuje błąd.
Problem w tym,ze dzialanie sie nie wykonuje,a błąd wyskakuje w jednej linijce nawet jak mama 4 liczby złe.Nie wiem czy z tymi niewiadomymi czegos nie poknociłem,bo juz sie troche w tym pogubiłem.

 #include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include<cstdlib>
#include<sstream>
using namespace std;

void zapisdo2(string plik2,const char* k)
{
fstream plikos;
plikos.open("plik2.txt",ios::out);
plikos<<k<<endl;
}

void zapisdo(string plik2,int k)
{
fstream pliko;
pliko.open("plik2.txt",ios::out);
pliko<<k<<endl;
}

void rozklad(int x)//rozklad na czyyniki
{
    string plik2;
    int k=2;
    while(x>1)
    {
        while(x%k==0)
        {
            zapisdo(plik2,k);
                        x/=k;
        }
                ++k;
    }
}

void odczytpliku(string plik1)
{
    string plik2;
 fstream plik;
string linia;
int z;
plik.open("plik1.txt",ios::in);
if(plik.good())
{
while(getline(plik,linia))
    z=0;
    int x=0;
{
    for( unsigned int i=0;i<linia.length();i++)
    {
       if( !isdigit( linia[i] ) )
             z=1;
    }
    if(z!=1)
    {
istringstream iss(linia);
linia = x;
rozklad(x);
    }
    if(z==1)
    {
        const char* k="blad wprowadzenia\n";
        zapisdo2(plik2,k);

    }

}


}
else
    cout<<"nie udalo sie wczytac";
}



int main()
{
string plik1;
   odczytpliku( plik1);
    return 0;
} 
0

Cały problem sprowadza się do formatowania kodu. Nie wiem jakim cudem udało Ci się to formatowanie tak zepsuć (chyba piszesz w notatniku). Spójrz na sformatowany kod i spróbuj znaleźć błąd.

#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;

void zapisdo2( string plik2, const char* k )
{
    fstream plikos;
    plikos.open( "plik2.txt", ios::out );
    plikos << k << endl;
}

void zapisdo( string plik2, int k )
{
    fstream pliko;
    pliko.open( "plik2.txt", ios::out );
    pliko << k << endl;
}

void rozklad( int x ) // rozklad na czyyniki
{
    string plik2;
    int k = 2;
    while( x > 1 )
    {
        while( x % k == 0 )
        {
            zapisdo( plik2, k );
            x /= k;
        }
        ++k;
    }
}

void odczytpliku( string plik1 )
{
    string plik2;
    fstream plik;
    string linia;
    int z;
    plik.open( "plik1.txt", ios::in );
    if( plik.good() )
    {
        while( getline( plik, linia ) )
            z = 0;
        int x = 0;
        {
            for( unsigned int i = 0; i < linia.length(); i++ )
            {
                if( !isdigit( linia[i] ) )
                    z = 1;
            }
            if( z != 1 )
            {
                istringstream iss( linia );
                linia = x;
                rozklad( x );
            }
            if( z == 1 )
            {
                const char* k = "blad wprowadzenia\n";
                zapisdo2( plik2, k );
            }
        }
    }
    else
        cout << "nie udalo sie wczytac";
}

int main()
{
    string plik1;
    odczytpliku( plik1 );
    return 0;
}

Na przyszłość, jeżeli nie chcesz używać normalnego IDE, które formatuje za Ciebie, skorzystaj od czasu do czasu z http://format.krzaq.cc/

0

Zmieniłem na takie cos,ale dalej nie działa.

 #include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;

void zapisdo2( string plik2, const char* k )
{
    fstream plikos;
    plikos.open( "plik2.txt", ios::out );
    plikos << k << endl;
}

void zapisdo( string plik2, int k )
{
    fstream pliko;
    pliko.open( "plik2.txt", ios::out );
    pliko << k << endl;
}

void rozklad( int x ) // rozklad na czyyniki
{
    string plik2;
    int k = 2;
    while( x > 1 )
    {
        while( x % k == 0 )
        {
            zapisdo( plik2, k );
            x /= k;
        }
        ++k;
    }
}

void odczytpliku( string plik1 )
{
    string plik2;
    fstream plik;
    string linia;
    int z;
    plik.open( "plik1.txt", ios::in );
    if( plik.good() )
    {
        while( getline( plik, linia ) )

        {
              z = 0;
        int x = 0;
            for( unsigned int i = 0; i < linia.length(); i++ )
            {
                if( !isdigit( linia[i] ) )
                {
                    z = 1;
                }
            }
            if( z != 1 )
            {
                istringstream iss( linia );
                linia = x;
                rozklad( x );
            }
            else
            {
                const char* k = "blad wprowadzenia\n";
                zapisdo2( plik2, k );
            }
        }
    }
    else
        cout << "nie udalo sie wczytac";
}

int main()
{
    string plik1;
    odczytpliku( plik1 );
    return 0;
} 
0

Co nie działa?

0

Jak w pliku jest dobra liczba to działanie sie nie wykonuje,jak sa np 2 zle liczby w 2 linijkach to wyskakuje tylko w jednej lini blad zamiast w 2.

0

Naprawilem to,ze teraz dziala podzial na liczby pierwsze,ale dalej jest problem z tym,że nie dopisuje nowych lini.Zauwazylem,ze w pliku wyjsciowym znajduje sie ostatnia z pliku wejsciowego,czyli kazda kolejna liczba z wejsciowego sie podmienia poprzednia,wychodzi na to ze nie dziala endline pomoze ktos?

1 użytkowników online, w tym zalogowanych: 0, gości: 1