Avatar
Gabriel Mastný
Redaktor
Avatar
Gabriel Mastný:

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
Where there's will, there's way.
Avatar
Odpovídá na Gabriel Mastný
Libor Šimo (libcosenior):

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
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Šimon Raichl:

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.