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í.
Avatar
Gabriel Mastný
Tvůrce
Avatar
Gabriel Mastný:11.1.2014 21:13

Zdravím,
Při úloze s kalkulačkou jsem se rozhodl trochu experimentovat a když jsem napsal kód aby se program zeptal na hodnoty A, operátor a B každý zvlášť a pak dal debugovat konzole se zeptá na první hodnotu když ji zadám zeptá se znovu ale na operátor a druhou hodnotu najednou... ano je to asi prkotina ale štve mě že na to nemůžu přijít děkuji za jakékoliv potenciální rady!

/* název: primitivní kalkulačka */
/* Zadání úkolu : Vytvořte program, který načte 3hodnoty (a,b,c) z toho (a,c) budou celé čísla,
b bude znak "+,-,*,/". Pomocí funkce switch zjistí, co je proměnná b vlastně za operátora a podle toho vypočítá
zadaný příklad.Takže si vytvoříme nový projekt. Vytvoříme si proměnnou a,c typu INT a b typu CHAR.
Poté pomocí vstupní funkce scanf si necháme načíst uživatelem dané hodnoty. Poté pomocí funkce switch zjistíme,
co je proměnná b typu char, zda je to "+,-,*,/". Tím zjistíme, co uživatel zadal za operátora,
podle toho zvolíme správnou operaci pro vypočítání daného příkladu. */

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

int main(){

int a,c;
char b;
printf("zadejte prvni hodnotu\n");
scanf("%d", &a);
printf("zadejte druhou hodnotu\n");
scanf("%d", &c);
printf("zadejte operator\n");
scanf("%c", &b);
switch(b)
    {
        case '+' : printf("Vysledek je %d", a+c); /* pokud znak b = + */
        break;
        case '-' : printf("Vysledek je %d", a-c); /* pokud znak b = - */
        break;
        case '*' : printf("Vysledek je %d", a*c); /* pokud znak b = * */
        break;
        case '/' : printf("Vysledek je %d", a/c); /* pokud znak b = / */
        break;
        default : printf("Zadal jste spatneho operatora."); /* pokud znak b = jiný znak */
    }


system("PAUSE");
return 0;
}
 
Odpovědět
11.1.2014 21:13
Avatar
Odpovídá na Gabriel Mastný
Libor Šimo (libcosenior):2.6.2014 14:10

Problém je v tom, že keď užívateľ zadá druhú hodnotu, potvrdí ju klávesou ENTER a to je znak '\n', ktorý si hneď zoberie premenná b, preto to vypisuje: "Zadal jste spatneho operatora."
Riešením je odstrániť znak ENTER nejak takto:

while(getchar() != '\n') ; // odstránenie znaku '\n' (ENTER)

Riadok je potrebné umiestniť za riadok

scanf("%d", &c);
Editováno 2.6.2014 14:12
Nahoru Odpovědět
2.6.2014 14:10
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Šimon Raichl
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Šimon Raichl:13.7.2014 9:08

Díky, dělal jsem také něco takového a pomohlo. :)

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

int main(int p, int d, char o)
{
    printf("Zadej prvni cislo\n");
    scanf("%d", &p);
    printf("Zadej druhe cislo\n");
    scanf("%d", &d);
    while(getchar() != '\n');
    printf("Zadej operator\n");
    scanf("%c", &o);
    switch(o)
    {
          case '+': printf("%d\n\a", p+d);
    break;
          case '-': printf("%d\n\a", p-d);
    break;
          case '*': printf("%d\n\a", p*d);
    break;
          case '/': printf("%d\n\a", p/d);
    break;
          default: printf("\nNapsal si spatneho operatora\n\a\a");
    break;
    }
    system("PAUSE");
    return 0;
}
 
Nahoru Odpovědět
13.7.2014 9:08
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.