Wczytywanie kilku zmiennych

0

Mam taki problem
mam wczytac kilka liczb w jednej lini oddzielonych spacja i wpisac je do tablicy potem ta tablice w odrrotnej kolejnosci wyswietlic

i mam problem z napisaniem warunku na zakonczenie wczytywania
napisalem takie cos


while((cin>>tablica[i]).eof())
{
    i++;
}

ale wtedy tylko jedna liczbe wczytuje
jak zrobic zeby wczytal tyle liczb ile bedzie podanych i zakonczyl wtedy petle?

0

Jeżeli chcesz pobrać wszystkie liczby to tak:

int i=0;
while(cin>>tablica[i++]);

A jeżeli tylko z jednej linii to najprościej w ten sposób:
wczytujesz do stringa linię za pomocą getline. następnie używasz istringstream za pomocą którego możesz wczytać wszystkie liczby ze stringa.

0
marseel napisał(a)

Jeżeli chcesz pobrać wszystkie liczby to tak:

int i=0;
while(cin>>tablica[i++]);

A jeżeli tylko z jednej linii to najprościej w ten sposób:
wczytujesz do stringa linię za pomocą getline. następnie używasz istringstream za pomocą którego możesz wczytać wszystkie liczby ze stringa.

wczytuje je tak

int i=0;
while(cin>>tablica[i++]);

sprawdzilem i wszystkie liczby sie wczytuja do tablicy ale program nie przechodzi do wykonywania instrujcji ktore nastepuja po tej petli nie wiem dlaczego

0

@autor bo zjadłeś negację ( czyli znak !). Bo chcesz czytać dopóki NIE trafisz na koniec pliku.
@marseel na moje oko to pętla nieskończona dopóki nie wprowadzisz strumienia w stan błędu.

@autor: a wiesz ile tych liczb będzie? Cudów nie ma, komputer musi jakoś odróżniać kiedy skończyłeś podawać liczby a kiedy jeszcze nie. Jak ma to odróżnić?

0

wlasnie o to chodzi ze nie wiadomo ile tych liczb bedzie.

Napisz program, który wczytuje z wejścia ciąg liczb i wypisuje go w odwróconej kolejności.
Wejście
Na wejście programu podana zostanie pewna niewielka ilość liczb całkowitych rozdzielonych spacjami.

0
int main(){
	while(1){
		int a;
		cin>>a;
		cout<<a;
		if(getchar() == '\n'){
			break;
		}
	}
	return 0;
}
0

ta linijka mi najbardziej pomogla

if(getchar() == '\n')

i wkoncu sie udalo, oto kod moze sie komus przyda, i dzieki wszystkim za pomoc

#include "stdafx.h"
#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	int liczby[20];
	int i=0;

	for(int i=0; i<20; i++)
		liczby[i]=0;

	while(cin>>liczby[i++])
	{
		if(getchar() == '\n')
		{
			break;
		}
	}
	

	for(i; i>0; i--)
		cout<<liczby[i-1]<<' ';


	getchar();
	getchar();
	return 0;
}
0

@Afish rozumiem ze dla ciebie odwrócona kolejność ma jakieś inne znaczenie? o_O

@autor:
Twoje rozwiązanie wysypie się jeśli ktoś postanowi podać 21 liczb ;] brawo. Ten break też super, bo przecież nie da sie dodać warunku w pętli...
Rozwiązanie bardziej "uniwersalne", ale bazujące na stosie.

#include <iostream>
using namespace std;

void funkcja()
{
  if(cin.peek()=='\n')
    return;
  int liczba;
  cin>>liczba;
  funkcja();
  cout<<liczba<<" ";
}

int main()
{
  funkcja();
  return 0;
}

0
Shalom napisał(a)

@autor:
Twoje rozwiązanie wysypie się jeśli ktoś postanowi podać 21 liczb ;] brawo. Ten break też super, bo przecież nie da sie dodać warunku w pętli...

tylko 20 dalem bo w tresci bylo ze pewna mala ilosc licz bedzie, zawsze mozna zwiekszyc z tym break'iem zabardzo nie wiem o co chodzi.
Twoje rozwiazanie wydaje sie byc lepsze prostsza zasada dzialania, zapamietam sobie to a zaraz jeszcze porownam wyniki ktory kod sie szybciej wykonuje;p

0

dla malej ilosci danych czas taki sam 0.00 ciekawy jestem jakby bylo dla wiekszej ilosc przykladowo 1000 liczb hmm...

0

Twoje powinno być szybsze oczywiście, bo nie marnujemy czas na calle i rety, tylko że ty musiałbyś kombinować z wielkością tablicy cały czas, a moje rozwiazanie jest tutaj uniwersalne.

Jedyne rozwiązanie jakie warto byłoby zastosować dla dowolnej ilości danych to użycie <vector> ;)

0
ifstream
int tablica[13]
ifstream odczyt("plik.txt");
while(!odczyt.eof())
{
odczyt>>tablica[i];
i++;
}

for(i-1;i>0;i--)
  cout<<tablica[i]<<endl;

ale polecam Ci rozwiązanie shaloma.... jeżeli znasz ilość liczb, to możesz zastosować np. moje... inaczej albo będziesz używał za dużo pamięci... albo fartem trafisz... albo przekroczysz rozmiar tablicy...

0
Shalom napisał(a)

Twoje powinno być szybsze oczywiście, bo nie marnujemy czas na calle i rety

Przykład optymalizacji tam, gdzie nie ma ona sensu. Co innego gdy przetwarzamy 100000 takich stringów na sekundę, a co innego gdy właśnie czekaliśmy 20 sekund na wpisanie przez użytkownika danych. Dodatkowe 0,000001 sekundy na przetwarzanie nie robi różnicy.

0

@up autor chciał tylko wiedzieć które rozwiazanie będzie szybsze dla duzej ilosci danych. Wątpie zeby klepał te 1000 czy więcej liczb z palca :P Wiadomo ze wąskim gardłem i tak będzie I/O ale mimo wszystko rozwiązanie bazujące na iteracji a nie na rekurencji będzie, przynajmniej teoretycznie, szybsze.
Chociaż wiadomo ze należy napisać rozwiazanie proste i uniwersalne, a martwić sie optymalizacją kiedy faktycznie okaże sie że to miejsce spowalnia nam program. Ale autor pisze to pewnie do szkoły/na uczelnię wiec może warto czasem sobie zafundować taką akademicką dyskusję na taki temat ;)

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