Stopowanie pętli za pomocą .eof()

Stopowanie pętli za pomocą .eof()
Sawy3R11
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Robiąc zadanie z strony SPOJ znalazłem takie oto zadanie

http://pl.spoj.com/problems/SUMA/

I pierwszy problem to zakończenie wczytywania po wciśnięciu pustej linijki <przynajmniej ja tak zrozumiałem>.
Znalazłem takie rozwiązanie w necie:

Kopiuj
#include<iostream>
using namespace std;
int main(void)
{
    int x;
    while(true)
    {
        cin>>x;
        if(cin.eof())break; 
        cout<<x<<endl;
    }   
   cout<<"koniec";
} 

Niestety ta konstrukcja nie stopuje mi tej pętli. Co mam zrobić, gdzie leży przyczyna ? :)

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Źle zrozumiałeś. Z wejścia lecą liczby i jak się skończą to wypisujesz wynik. Nie musisz tu nic kombinować, wystarczy ci zwykłe

Kopiuj
while(cin>>zmienna){

}

Jak chcesz to testować to rób to tak jak sprawdzarka czyli przekierowując dane z pliku

program < plik.txt

Albo podawaj z klawiatury znak EOF ctrl+d albo ctrl+z

Sawy3R11
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

czyli aby SPOJ przyjął mi to rozwiązanie am być wczytywanie z pliku o nazwie plik.txt ?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Nie - masz wczytywać ze standardowego wejścia.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Nie. OMG. Brak mi słów do twojego czytania ze zrozumieniem.

Kopiuj
int main(){
  int liczba;
  int suma = 0;
  while(cin>>liczba){
    suma+=liczba;
    cout<<suma<<"\n";
  }
  return 0;
}

Mniej więcej takiego kodu oczekuje spoj dla tego zadania. Chociaż ja osobiście użyłbym jednak scanf i printf zamiast cin i cout.

Sawy3R11
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

mam taki pytanie odnoście tego zadania, jak sobie poradzić z niewiadomą liczbą danych?
raczej nie można użyć tablicy dynamicznej, ponieważ trzeba było by podać wcześniej ilość rozwiązań, czyli zadeklarować z nadmiarem np t[100]?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Jeżeli nie podano ile może być tych danych to poszukaj algorytmu bez gromadzenia danych.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
1

lub korzystaj z kontenerów: vector, map itp.

Sawy3R11
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Temat do zamknięcia ;)

to moje pierwsze zd na SPOJ'u było i trochę sobie sam to pokomplikowałem ;)

Pozdrawiam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.