wczytywanie liczb z pliku - funkcja "cin"

0

w pliku txt mam 4 liczby: "1 2 3 4 "

wczytuję to w pętli:

 
int liczba=0;
char c;
while (1) {
    cin >>liczba;
    c=getchar();
    if (c == '\n' || c == EOF ) {
        break
    }
}

wcześniej oczywiście jest jeszcze cały kod dotyczący czytania z pliku etc..

Założenie jest takie, że nie znam długości ciągu tych liczb. Po każdej jest spacja na końcu. Problem polega na tym, że ostatnią cyfrę/liczbę wczytuje mi dwa razy jeśli jest po niej spacja. Jeśli nie ma wszystko jest ok. Czy ktoś wie dlaczego tak się dzieje i jak to obejść ?

dziękuję z góry.

0
while( cin>>liczba ){/*operacje na liczbie*/}
0

Dlaczego wątek jest ciągnięty w komentarzach?

Działo się tak dlatego, ponieważ w sytuacji, gdy po ostatniej liczbie były jakieś znaki(spacja) to getchar wczytało spację, ona nie jest ani EOFem ani '\n', więc warunek w if'ie nie był spełniony. Kolejna próba wczytania liczby powodowała natrafienie na EOF i to samo działo się przy kolejnym wywołaniu getchar.

Przy rozwiązaniu Ola Nordmanna liczby będą pobierane tak długo aż strumień nie natrafi na EOF lub wejdzie w stan błędu(co się stanie po wpisaniu ciągu znaków nie będących liczbą). Wystarczy, że w celu zakończenia wprowadzania danych wpiszesz znak EOF(linux - Ctrl+D, win - Ctrl + Z).

0

Ok, rozumiem. To działa jeśli przekieruje wejście do programu z pliku. Jak zrobić, żeby po wczytaniu ostatniej liczby " z palca" , po której jest jest spacja następowało przerwanie wczytywania ?

0

Wpisywanie liczb z "palca" kończysz przez ctrl + c lub ctrl + d zależnie od systemu. Ew jakoś "łapać" błąd że nie wpisano liczby, i wtedy kończyć pracę programu, np modyfikując ten kod Zabezpieczenie przed wpisywaniem liter.

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