Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jak v C naskenovat předem neurčený počet čísel?

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lukáš Jůza:29.9.2022 22:18

Načíst a vytisknout 6 čísel je hezký, ale problém nastal,v momentě kdy se nažím vymslet způsop, jak napsat program, do kterého je možné napsat jedno, dvě nebo klidně sto čísel najednou a uložit je.

Je možné v C nějak efektivně tento problém vyřešit?

Zkusil jsem: #include <stdio.h>

int main(){
int a1, a2, a3, a4, a5, a6;
scanf("%d %d %d %d %d %d", &a1, &a2, &a3, &a4, &a5, &a6);
printf("numbers:\n %d, %d, %d, %d, %d, %d", a1, a2, a3, a4, a5, a6);

return 0;
}

Také jsem zkoušel něco ve stylu:

int Array[99];
i = int;
for (i=0; i < 10; i++) {
scanf("%d", Array[i]);
printf("%d", Array[i]);
}
Ale pořád stejný problém počet čísel je předem definovaný. Ano mhol bych se zeptat, kolik čísel hodláte napsat?
Jenže pořád by to mělo své nedostatky: čísla bych zadával zvláš po jednom a navíc co když já nebo program, který bude čísla zadávat, ani sám neví, kolik jich bude?

Chci docílit: #include <stdio.h>

int main(){
int a;
scanf("%d, %d, ..., %d", a+0, a+1, ..., a+n);
printf("number­s:\n%d, %d, ..., %d ", a+0, a+1, ..., a+n);

return 0;
}
---> chyby v syntaxi ignorujte, Kód je jen ilustrační...

Snažím se aby při vstupu: 20 30 40 43 87 98
byl výstup: 20, 30, 40, 43, 87, 98,
ale zároveň aby čísel nemuselo být vždy 6 ale <0,∞)
a následně šlo s čísly pracovat.

 
Odpovědět
29.9.2022 22:18
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Lukáš Jůza
DarkCoder:30.9.2022 11:18

Samozřejmě že je možné načíst neznámý konečný počet čísel do paměti a následně je možno s nimi pracovat. Je však k tomu zapotřebí znalost dynamických datových struktur (seznam, pole). Čísla se načítají v cyklu do proměnné na které se provádí validace. Pokud je validace úspěšná, tedy načetlo se úspěšně číslo, pak se vytvoří nod spojového seznamu, nastaví se jeho hodnota z proměnné a příznak konce seznamu. Tento nod se vloží na konec spojového seznamu. To celé se provádí tak dlouho dokud neselže paměť nebo dokud neprojde validace proměnné na číslo. Tímto získáš spojový seznam ve kterém jsou uložena veškerá načtená data o předem neznámém počtu. Pokud se budou provádět často operace nad jednotlivými prvky spojového seznamu, je dobré následně převést celý spojový seznam na dynamické pole.

Nahoru Odpovědět
30.9.2022 11:18
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.