Diskuze: Naplnenie poľa číslami zo vstupu

C a C++ C a C++ Naplnenie poľa číslami zo vstupu American English version English version

Aktivity (1)
Avatar
Rudolf Mak
Člen
Avatar
Rudolf Mak:11. července 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. července 13:02
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rudolf Mak
DarkCoder:11. července 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. července 13:31
Nahoru Odpovědět 11. července 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. července 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. července 13:31
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 11. července 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. července 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. července 13:59
 
Nahoru Odpovědět 11. července 13:57
Avatar
DarkCoder
Člen
Avatar
DarkCoder:11. července 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. července 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. července 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. července 15:50
PePe je bůh!! xD
Avatar
Rudolf Mak
Člen
Avatar
Rudolf Mak:11. července 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. července 16:16
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rudolf Mak
DarkCoder:11. července 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. července 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.