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: Naplnenie poľa číslami zo vstupu

Aktivity
Avatar
Rudolf Mak
Člen
Avatar
Rudolf Mak:11.7.2018 13:02

Zdravím, potreboval by som naplniť pole číslami ktoré zadá užívateľ do jedného riadka tak aby čísla boli oddelené medzerou.

Zkusil jsem: Vôbec neviem kde začať. Jediný spôsob čo ma napadol bol tento:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        printf("Zadajte 5 čísel: \n");
        int array[5];
        scanf("%d",array);

        int sum = 0;
        int i;
        for(i = 0; i < 5; i++)
        {
                sum += array[i];
        }
        printf(" Súčet čísel je %d \n", sum);
        return 0;
}

Chci docílit: Chcem aby vystup programu a zadávanie čísel vyzeralo nejak takto:

Zadajte 5 čísel:
5 10 20 0 8
Súčet čísel je 43.

Teda chcem sa vyhnúť zadávaniu čísel cez viacero riadkov, napríklad pomocou for-cyklu.

 
Odpovědět
11.7.2018 13:02
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rudolf Mak
DarkCoder:11.7.2018 13:30
#include<stdio.h>

int main(void){
        int array[5];
        int sum = 0;
        int i;

        printf("Zadajte 5 cisel: ");
        scanf("%d %d %d %d %d", &array[0], &array[1], &array[2], &array[3], &array[4]);

        for(i = 0; i < 5; i++) sum += array[i];

        printf("Sucet cisel je %d\n", sum);
        return 0;
}
Editováno 11.7.2018 13:31
Nahoru Odpovědět
11.7.2018 13:30
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na Rudolf Mak
Matúš Olejník:11.7.2018 13:30

Ahoj stačí aby si načítaval hodnoty do poľa v cykle, v ktorom môžeš rovno aj spočítavať súčet

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 5

int main() {
    int numbers[ARRAY_SIZE];
    int i, sum = 0;

    printf("Zadajte %d cisel: \n", ARRAY_SIZE);
    for(i = 0; i < ARRAY_SIZE; i++){
        scanf("%d", &numbers[i]);
        sum += numbers[i];
    }

    printf("Sucet cisiel je %d\n", sum);

    return 0;
}
Editováno 11.7.2018 13:31
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
11.7.2018 13:30
/* I am not sure why this works but it fixes the problem */
Avatar
Rudolf Mak
Člen
Avatar
Odpovídá na DarkCoder
Rudolf Mak:11.7.2018 13:57
scanf("%d %d %d %d %d", &array[0], &array[1], &array[2], &array[3], &array[4]);

Tento kód síce funguje, ale hľadám niečo všeobecnejšie, čo by fungovalo pri rôznej dĺžke poľa (ktorá môže byť dopredu známa).

Editováno 11.7.2018 13:59
 
Nahoru Odpovědět
11.7.2018 13:57
Avatar
DarkCoder
Člen
Avatar
DarkCoder:11.7.2018 14:10

Pokud chceš aby to fungovalo pro různý počet prvků v poli, sestav si funkci pro proměnný počet parametru nebo použij způsob který zde prezentoval Matúš Olejník. Nevidím důvod proč se vyhýbat řídícím příkazům.

Nahoru Odpovědět
11.7.2018 14:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na Matúš Olejník
Petr Urbánek:11.7.2018 15:50

Popř. by šlo použít while (scanf() >0) protože scanf při neplatném načtení vrátí záporný int. Pak bys nemusel ani dopředu znát počet čísel.
Není testováno, spíše myšlenka. Jsem na telefonu.
Kódu zdar.

Nahoru Odpovědět
11.7.2018 15:50
PePe je bůh!! xD
Avatar
Rudolf Mak
Člen
Avatar
Rudolf Mak:11.7.2018 16:16

Ďakujem za všetky radi. Môj problém bol v tom že som potreboval zadať celý vstup cez jeden riadok. Myslel som si, že ak dám scanf() do for-cyklu, tak za každou hodnotou budem musieť stlačiť ENTER a vstup nebude v jednom riadku, ale keď som vyskúšal for-cyklus, tak program fungoval aj keď som hodnoty oddeľoval medzerou.

 
Nahoru Odpovědět
11.7.2018 16:16
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rudolf Mak
DarkCoder:11.7.2018 16:50

Program funguje tak že funkce scanf() čte znaky dokud jsou platné v rámci specifikace formátu. Tuto hodnotu, pokud je platná, přiřadí do promenne kterou určuje další argument. Zbylé znaky zůstávají ve vstupním bufferu a mohou být načteny další vstupní funkcí. Funkce scanf() se provede až po zadání znaku nového řádku. V nové interakci cyklu, ve které opět figuruje funkce scanf(), jsou načteny další znaky a celý proces pokračuje dokud platí podmínka cyklu.

Nahoru Odpovědět
11.7.2018 16:50
"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 8 zpráv z 8.