Stopowanie pętli za pomocą .eof()

Stopowanie pętli za pomocą .eof()
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • 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:około 21 lat
  • Ostatnio:prawie 3 lata
  • 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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • Postów:66
0

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

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Nie - masz wczytywać ze standardowego wejścia.


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • 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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • 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]?

Shalom
A co ci sie nie podoba w rozwiązaniu które podałem? o_O
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
1

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


░█░█░█░█░█░█░█░█░█░█░█░
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • 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.