Skocz do zawartości
aurel

Problem Z Wczytywaniem Danych

Rekomendowane odpowiedzi

mam na przykład do napisanie prościuchny programik:

 

https://pl.spoj.pl/problems/SUMA/

 

jak widać, program ma sie wykonywać aż skończy się podawanie danych na wejście.

a więc robie tak, że mój program:

 

#include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]){	int c, a=0, b=0;	while ((c=getchar())!=EOF)	{		  ungetc(c, stdin);		  		  cin >> a;		  b=b+a;		  cout << b << "\n";  	}		  	return EXIT_SUCCESS;}

o kodzie prostym jak drut, otwieram przez cmd program.exe < dane.txt > wynik.txt

 

jako dane podaje mu:

6

8

-3

 

a jako wynik wyrzuca:

6

14

11

8

 

 

dlaczego ten drań wykonuje się jeszcze raz po zakończeniu podawania testów?!

jest mi ktoś w stanie pokazać błąd? :(

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zobacz to:

#include <iostream.h>#include<fstream.h>#include <stdlib.h>  using namespace std;int main(){	  int a=0,b=0,c=0;	  ifstream plikWe;	  plikWe.open("c:\\dane.txt");	   while((plikWe>>a)&&!plikWe.eof())	   //wersja while(!plikWe.eof())	  //{	 //plikWe>>a;	// dziala podobnie do twojej	  {		  b=b+a;		  cout<<b<<endl;	   	  }	  plikWe.close();	  system("PAUSE");	  return 0;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kiedy wy sie nauczycie ze w naglowkach c++ nie ma .h ? Poza tym nie wiem czy zauwazyles, ale on nie operuje na plikach ;P

 

while((plikWe>>a)&&!plikWe.eof()) <-- niepotrzebna podwojna zlozonosc obliczeniowa. Po co dwa razy sprawdzac czy nie nastapil koniec pliku ? samo while((plikWe>>a)) by wystarczylo.

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kiedy wy sie nauczycie ze w naglowkach c++ nie ma .h ? Poza tym nie wiem czy zauwazyles, ale on nie operuje na plikach ;P

 

while((plikWe>>a)&&!plikWe.eof()) <-- niepotrzebna podwojna zlozonosc obliczeniowa. Po co dwa razy sprawdzac czy nie nastapil koniec pliku ? samo while((plikWe>>a)) by wystarczylo.

po co te złośliwości i ironiczny ton?

 

1. #include <iostream.h>

#include<fstream>.h

#include <stdlib.h>

moja wersja devcpp (4) 'wybacza' takie nieścisłości. w pracy mam XP, w cpp nie pracuje więc devcpp mi wystarcza.

2. po tym

o kodzie prostym jak drut, otwieram przez cmd program.exe < dane.txt > wynik.txt

wnoszę że może mu się przydać wersja na plikach.

 

3. while((plikWe>>a)) bez czyszczenia wejścia działa tak samo jak kod aurala co mu nie wystarcza.

 

kiedy piszę kod na forum zawsze sprawdzam wcześniej jego działanie.

 

ps. czy potrzeba się wywyższać?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

operacje na plikach w tym wypadku są wykluczone

 

czyszczenie bufora na koniec działania programu nie pomaga (wciąż wyświetla się jedno b za dużo)

 

zadziałało gdy dodałam if (feof(stdin)) break; tuż po wczytaniu danych :)

Edytowane przez aurel

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

po co te złośliwości i ironiczny ton?

 

ps. czy potrzeba się wywyższać?

Zle mnie zrozumiales :) Aczkolwiek jak udzielasz komus rad to warto znac specyfikacje jezyka i male upomnienie chyba tutaj nie szkodzi ? :>

 

czyszczenie bufora na koniec działania programu nie pomaga (wciąż wyświetla się jedno b za dużo)

bo masz go czyscic na koniec PĘTLI, a nie PROGRAMU. U mnie pomoglo, ale przyznaje ze nie sprawdzalem jak z przekierowaniami to dziala, tylko na konsoli.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...