Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
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
Redaktor
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
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 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
Redaktor
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  +1 11.7.2018 14:10
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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
Redaktor
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  +1 11.7.2018 16:50
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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.