[C] wczytywanie z konsoli

0

Pytanko małe jak wczytać do tablicy nieokreśloną z góry liczbę liczb.

Powiedzmy iż wpiszę
1 44 22 11 44

Wpadłem na pomysł by wczytać całą linie do tablicy char. Potem trzeba się męczyć z przekształcaniami na int.

Można to jakoś wykonać w bardziej prosty sposób?

0

jeśli znasz, to możesz na początku podać listę elementów jako pierwszą wartość i później w pętli

0

chodzi mi o to iż nie znam

0

a co powiesz na podwójną spację oznaczającą koniec liczb?

0

A skąd wiesz że liczby sie już skończyły? Po wczytaniu znaku newline?
Splitujesz wczytanego stringa po spacjach i robisz sobie atoi() na tych kawałkach.

0

chodziło mi czy jest jakaś prostsza metoda do wczytania liczb z konsoli. Czyli od razu zapis do tablicy int.
Wczytywanie po spacjach ? Tutaj chodzi ci iż muszę przelatywać po stringu wyciągając liczby między separatorem spacji(32) ?

0

A ja bym wczytywał znak po znaku. Wczytuje znak, zamieniam na cyfre, wczytuje następny znak. Jeżeli nie jest spacją ani endline'm to mnoże to co już mam razy 10 i dodaje. I tak aż do spacji albo '\n'. Jak spacja to zapisuje w tablicy i zaczynam od nowa. Jak endline to koniec.

0

@goransol prościej byłoby gdybyś powiedział po co ci to jest ;]
Bo jeśli na jakiegoś SPOJa to da się to zrobić bez takich kombinacji, bo tam na koniec wejscia masz EOF.

0

jak wczytujesz %d, to wskaźnik zatrzymuje się na znaku po liczbie. Można to wykorzystać do sprawdzenia następnego znaku. przykład:

	int a;
	char c;
	int suma=0;
	do{
		scanf("%d%c", &a, &c);
		suma+=a;
	}while(c==32);

tyle że jeśli na końcu zamiast entera będzie spacja, to będzie dalej czekał na liczbę.

Gdzieś miałem bardzo ładną funkcję do zamiany char* na int/long, a nawet i float/double, która szuka pierwszej napotkanej liczby i ustawia podany (opcjonalny) wskaźnik na znak po tej liczbie pozwalając na łatwe pobranie wszystkich liczb z char*a. Zwykły while, w którym się sprawdzało wartość tego wskaźnika wystarczył.

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.