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

Wczytywanie liczb z pliku textowego operatorem >>

Ostatnio zmodyfikowano 2016-09-04 15:16
Autor Wiadomość
ForExample
Temat założony przez niniejszego użytkownika
Wczytywanie liczb z pliku textowego operatorem >>
» 2016-09-03 15:29:53
Witam. Mam problem polegający na tym, że gdy sposobem podanym w tytule zapisuję liczby do tablicy coś nie dzieje po mojej myśli. Ogólnie rzecz w tym, że pętla wczytująca liczby do tablicy wykonuje się chyba nieodpowiednią liczbę razy. Głównym moim zapotrzebowaniem jest to, jaki warunek powinien się znaleźć, aby skończyć wczytywanie liczb do tablicy po wczytaniu ostatniej liczby występującej w pliku.
P-151390
carlosmay
» 2016-09-03 15:42:25
Głównym moim zapotrzebowaniem jest to, jaki warunek powinien się znaleźć, aby skończyć wczytywanie liczb do tablicy po wczytaniu ostatniej liczby występującej w pliku.
if(nieUdałoSięWczytać)

Słabo idzie mi z wróżeniem. Pokaż kod i zawartość pliku.
P-151392
ForExample
Temat założony przez niniejszego użytkownika
» 2016-09-03 17:39:00
C/C++
int tablica[ 400 ];

while( nie wiem co dac tutaj )
{
    file_x >> tablica[ i ];
    i++;
}
probowalem z for ale tez zle bylo, bo dawalem warunek "dopoki file_x.good()"...
P-151396
carlosmay
» 2016-09-03 17:49:04
C/C++
size_t i = 0;
while( file_x >> tablica[ i++ ] );
Oczywiście musisz mieć gwarancję, że tablica ma wystarczający rozmiar.

Lepiej używać std::array<> niż gołej tablicy,
a w tym przypadku std::vector<> bo nie trzeba pilnować rozmiaru
C/C++
std::vector < int > tablica;
int liczba { };
while( file_x >> liczba ) {
    tablica.push_back( liczba );
}
 
P-151397
ForExample
Temat założony przez niniejszego użytkownika
» 2016-09-03 18:16:43
Jeszcze nie znam tych rzeczy o ktorych piszesz, wiec wolalbym po prostu uzyc tablicy. Jednak samo
while( file_x >> tablica[ i++ ] );
 nic nie dalo
P-151400
carlosmay
» 2016-09-03 18:34:33
C/C++
#include <iostream>
#include <fstream>

int main()
{
    constexpr int rozmiar { 400 };
    int tablica[ rozmiar ];
   
    std::ifstream fin( nazwaPliku );
   
    size_t i { 0 }; // od C++11 ujednolicony sposób inicjalizacji zmiennej (to samo co size_t i = 0;)
    while( fin >> tablica[ i++ ] );
   
    for( auto const & elem: tablica ) // pętla oparta na zakresie
         std::cout << elem << ' ';
   
    std::cout << '\n';
}
Wklej i skompiluj.
P-151401
ForExample
Temat założony przez niniejszego użytkownika
» 2016-09-03 18:48:35
Coś poszło nie tak, wyskoczyło 100 wielkich dziwnych liczb. Poza tym też nie wszystko co napisałeś jest mi znane
C/C++
void load_numbers( string const file )
{
    fstream filex;
    filex.open( file );
    int i = 0, x;
    if( !filex.good() )
    {
        cerr << "Nie udalo sie otworzyc pliku" << endl;
        exit( 0 );
    }
    else
    {
        int tablica[ 400 ];
       
        while( tutaj jest problem ) // <---- myśle, że tylko ten warunek jest mi potrzebny i bedzie dobrze
        {
            filex >> tablica[ i ];
            i++;
        }
       
       
        cout << i << endl; //te 3 linie nieistotne, tylko do sprawdzania
        cout << tablica[ 16 ] << endl;
        cout << tablica[ i ];
    }
    filex.close();
}
P-151405
carlosmay
» 2016-09-03 19:12:35
C/C++
while( true ) // <---- myśle, że tylko ten warunek jest mi potrzebny i bedzie dobrze
{
    if( !( filex >> tablica[ i ] ) )
         break;
   
    i++;
}

cout << tablica[ i ];
 UB jeśli rozmiar tablicy odpowiada ilości wczytań z pliku.
UB - niezdefiniowane zachowanie.

Poza tym też nie wszystko co napisałeś jest mi znane
Nic nie stoi na przeszkodzie poznać.
P-151406
« 1 » 2 3
  Strona 1 z 3 Następna strona