Stopowanie pętli za pomocą .eof()

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:

#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 ? :)

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

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

0

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

1

Nie - masz wczytywać ze standardowego wejścia.

1

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

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.

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]?

1

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

1

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

0

Temat do zamknięcia ;)

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

Pozdrawiam

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