IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Nefunkční if else v ukolu plus rozdělení celého a desetinného čisla

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

Aktivity
Avatar
Jan Jenda
Člen
Avatar
Jan Jenda:2.11.2017 16:23

Ahoj zde je můj první kód, měl by vypsat první otázku s odpovědmi což udělá já zvolím C, vypíše správně a pak vypíše i zbytek kodu s další otázkou, i s tím, že jsem odpovedel spatne. nenechá mi to zadat další znak z klávesnice abych odpovedel i na dalsi otázku. muzu se zeptat kde mám chybu? :) Děkuji

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

/*
 *
 */
int main(int argc, char** argv) {
    char odp;


    printf("Ahoj vítej v mém kvízu\n");
    printf("\n");
    printf("Fotbal je hra s...\n");
    printf("A-Míč\n");
    printf("B-Kolík\n");
    printf("C-Nůž\n");
    scanf("%c", &odp);
    if (odp == 'a')
    {
        printf("Správně!\n");
        printf("\n");
        printf("\n");
        printf("Kdo je prezidentem ČR\n");
        printf("A-Roman\n");
        printf("B-Miloš\n");
        printf("C-René\n");
        scanf("%c", &odp);
        if (odp == 'b')
        {
            printf("Správně!");

        }

        else
            printf("Špatně skončil si!");


    }

    else
        printf("Špatně skončil si!");








    return (EXIT_SUCCESS);
}

V tom druhém kódu bych měl zadat destinné číslo, které by program měl rozdělit na celou a desetinnou část. Taky nevím proč mi nefunguje..

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * File:   main.c
 * Author: X
 *
 * Created on 2. listopadu 2017, 13:20
 */

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



/*
 *
 */
int main(int argc, char** argv)
{

     float c;
    float cc;
    float dc;

    printf("Zadej reálné číslo:\n");
    scanf("%f", &c);


    cc = (int)c;
    dc = c - cc;

    printf("Zadal si číslo %f jeho destinná část je %f a jeho celá část je %d", c, dc, cc);


    return (EXIT_SUCCESS);
}
 
Odpovědět
2.11.2017 16:23
Avatar
Jan Jenda
Člen
Avatar
Jan Jenda:2.11.2017 16:29

Jezis omlouvam se mrksnul jsem to do javy misto c. presunul by to nekdo prosim? mockrat dekuji

 
Nahoru Odpovědět
2.11.2017 16:29
Avatar
Odpovídá na Jan Jenda
Matúš Olejník:3.11.2017 9:13

V prvom prípade keď odpovedáš na prvú otázku tak scanf načíta znak a keďže stlačíš enter vyhodnotí sa podmienka a ten stlačený enter si načíta druhý scanf a teda ďalšia podmienka neplatí. Ak chceš aby scanf ignoroval biele znaky môžeš to spraviť napr. takto

scanf(" %c", &odp);

prípadne za každý scanf môžeš dať getchar() ktorý ti tento nový riadok zožerie.

V druhom prípade namiesto float cc; daj int cc;

Editováno 3.11.2017 9:15
Nahoru Odpovědět
3.11.2017 9:13
/* I am not sure why this works but it fixes the problem */
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 3 zpráv z 3.