Wczytywanie liczb z pliku tekstowego

0

chce odczytac z pliku txt liczbę, jednak gdy odczytuje ją zamiast wartości 157 pojawia się 0 i poniższa petla zostraje przerwana

    //odczytywanei pliku z nr klatek
            ifstream plik_klatki;
            plik_klatki.open( sciezka_odczyt.c_str() );

            if( !plik_klatki.good() )
            {
            return false;
            cout << "Nie udalo sie otworzyc pliku!" << endl;
            }
             cout<<"wczytanie: "<< sciezka_odczyt <<endl;

             while( true )
             {
                cout<<"lalala"<<endl;
                int nr_klatki;
                plik >> nr_klatki;
                cout<<"nr klatki:"<<nr_klatki<<endl;
                if( plik.good() )
                {
                    cout<<"nr klatki:"<<nr_klatki<<endl;
                }else
                break;
             }
0

Działa tylko zamiast plik_klatki masz napisane plik. Ewentualnie jeżeli nie zadziała to masz ścieżkę źle podaną bo ja wpisywałem bezpośrednio.

0

fakt po zmainei nazwy jest ok

tylko teraz nie moge w ogóle skompilować programu

wyskakuje okienko:
Makefile.win has changed. Reload from disk?

i się już skompilować nie chce, kompilator do dev c++

a cały kdo wyglada tak:

 #include <iostream>
#include <stdio.h>      /* printf, scanf, puts, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>  
#include <fstream>
#include <string>
#include <cstdio>
#include <conio.h>

using namespace std;

bool wczytajPlik( string nazwaPliku );

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

string inttostring(int i)
{
string tmp; // brzydkie rozwiązanie
itoa(i, (char*)tmp.c_str(), 10);
string str = tmp.c_str();
return str;
}

int main(int argc, char** argv) {

    string imie="Adam_";
    //cout<<imie<<endl;
    srand(time(0));
    string nazwaPliku= "dane_wejsciowe\\nazwy_sekwencji.txt";
    ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
    {
         return false;
         //cout<<"sadsa";
         cout << "Nie udalo sie otworzyc pliku!" << endl;
     }

    cout<<"wczytanie nazwy_sekwencji.txt"<<endl;
    while( true ) //pętla nieskończona
    {
        string b;
        plik >> b;
        if( plik.good() )
        {
            cout<<"string b odczytany z pliku:"<<b<<endl;

            unsigned pos = b.find(".");//usuwanie rozszerzenia
            b.erase(pos);

            cout<<"string b po usunieciu rozszerzenia:"<<b<<endl<<endl;

            string sciezka_zapis ="wynik\\" + imie + b + ".txt";
            cout<<"sciezka zapisu:"<<sciezka_zapis<<endl;

            string sciezka_odczyt ="dane_wejsciowe\\" + b + "_frames.txt";
            cout<<"sciezka odczytu:"<<sciezka_odczyt<<endl<<endl;

            //odczytywanei pliku z nr klatek
            ifstream plik_klatki;
            plik_klatki.open( sciezka_odczyt.c_str() );

            if( !plik_klatki.good() )
            {
            return false;
            cout << "Nie udalo sie otworzyc pliku!" << endl;
            }
             cout<<"wczytanie: "<< sciezka_odczyt <<endl;

             while( true )
             {
                cout<<"lalala"<<endl;
                int nr_klatki;
                plik_klatki >> nr_klatki;
                cout<<"nr klatki:"<<nr_klatki<<endl;

                /*if( plik_klatki.good() )
                {
                    int x=3;
                }else*/
                break;
             }

        }
        else
             break; //zakończ wczytywanie danych - wystąpił jakiś błąd (np. nie ma więcej danych w pliku)

    } //while

    cout<<"skonczone"<<endl;
    getch();
    return 0;
}
0

dobra juz wiem chodziło o to, że proces o nazwie tego programu był nadal uzywany, a nie o ten komunikat

w każdym razie mam nastepny problem, bo program ma odczytac z jednego pliku nazwy plikow do odczytanie, zapisuje je w zmiennej b, a potem odczytać z nich wartości do zmiennej nr_klatki i ja wyswietlić jednak wyswietla tylko klatki z 2 plików a 3 nie

0
  • szweszwe
    kod jest w poscie wyżej przecież
0
    if( !plik.good() )
    {
         cout << "Nie udalo sie otworzyc pliku!" << endl;
         return false;
     }

Opisz problem tak aby dało się zrozumieć bez czytania twoich myśli.

0

w pliku nazwy_sekwencji.txt sa nawy plikow do odczytania
są 3 pliki txt z licznami, których nazwy są w pliku nazwy_sekwencji.txt (tzn w pliku txt są pliki avi, ale txt z liczbami maja podobne do nich nazwy)
i trzeba te liczby odczytać, ale odczytują mi się tylko liczby z 2 plików z trzeciego nie

0

Po ludzku to się robi tak:

    string b;
    while(plik >> b) //pętla nieskończona
    {
            cout<<"string b odczytany z pliku:"<<b<<endl;

"Nie czyta" trzeciego bo po return już nie ma komunikatu:

            if( !plik_klatki.good() )
            {
             cout << "Nie udalo sie otworzyc pliku!" << endl;
             return false;
             }
0

no to przecież tego komunikatu nie ma być, to sie ma wyświetlac tylko jak plik nie zostanei odczytany
a mi chodzi o to, że zmienna nr_klatki wyświetla się tylko dla 2 pierwszych plików, a dla trzeciego nie

0

A to: cout<<"string b odczytany z pliku:"<<b<<endl; się wyświetla dla 3-go pliku ?

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