Kalkulačka – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kalkulačka – C / C++ – Fórum – Programujte.comKalkulačka – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Anakin0
Duch
16. 11. 2013   #1
-
0
-

Ahoj, potřeboval bych poradit s jedním programem. Možná se vám to bude zdát jednoduché ale pro mě to rozhodně jednoduché není. 

Chci vytvořit program podobný kalkulačce. vstup je ve tvaru num1 operator num2 , kde num1 a num2 jsou čísla typu double, operator je jedním ze znaků +,-,*,/.

Toto je můj pokus o napsání toho kódu:

#include <stdio.h>
 
int main()
{
   char operator;
   double num1, num2;
 
 
   printf("Napiš co chceš vypočítat\n");
   scanf("%f%c%f", &num1, &operator, &num2);
 
 
   switch(operator);
   {
    case '+':
        printf("num1+num2=%.2f",num1+num2);
        break;
    case '-':
        printf("num1-num2=%.2f",num1-num2);
        break;
        case '*':
        printf("num1*num2=%.2f",num1*num2);
        break;
    case '/':
        if(num2 != 0)
        {
                    printf("num1/num2=%.2f",num1/num2);
            break;
        }
        else
        {
            printf("Error! Dělíte nulou.");
            break;
        }
    default:
        printf("Error! Špatně zadaný operátor.");
        break;
   }
   return 0;
}

Musím ovšem vyřešit tyto problémy, doufám, že s vaší pomocí to vyřeším:

1) Musím nějak upravit ten můj kód protože nefunguje (nelze ho spustit). Nevím proč to nefunguje. Poraďte prosím.

2) Musím vyřešit problém se zadáváním vstupu. Konkrétně mám na mysli, jak programu říct, že pokud uživatel zadá  

2.456     * 5

tak se tím myslí 2.456*5


 

Tedy že by program měl ignorovat ty mezery. Vůbec nevím, jak na to.

3) Co napsat aby pokud by uživatel zadal takový to vstup 

3

program napsal 

Chybně zadaný vstup

Byl bych moc rád kdyby mi někdo napsal ty kousky kódu, které mi chybí nebo poradil, jak je napsat abych je mohl implementovat do mého kódu. Díky

Nahlásit jako SPAM
IP: 213.226.195.–
vitamin+8
Grafoman
16. 11. 2013   #2
-
0
-

#1 Anakin
nacitaj to ako pole znakov (string), potom odstram medzery a znovu to nacitaj cez sscanf akomas v programe. scanf vracia pocet uspesne nacitanych prvkov, v tvojom pripade by to malo byt 3, inak nastala chyba.

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Robo
~ Anonymní uživatel
82 příspěvků
16. 11. 2013   #3
-
0
-

#1 Anakin
no typujem že projekt vytváraš v .cpp a nie .c, keďže tam máš operátor. Keď ti vývojové prostredie vysvieti nejakú tvoju premennú, tak to znamená, že je to vyhradený operátor pre ten programovací jazyk
Takže si zmeň svoju premennú operátor.
Ďalšia vec je tá , že máš za switch bodkočiarku, čiže ti to nevstúpi do tela toho switchu.

Nahlásit jako SPAM
IP: 178.253.138.–
z
~ Anonymní uživatel
268 příspěvků
16. 11. 2013   #4
-
0
-

   

char op[2];
double num1, num2;

if (scanf("%lf %1[/*+-] %lf", &num1, &op, &num2) != 3)
    oops;
Nahlásit jako SPAM
IP: 88.101.8.–
Anakin
~ Anonymní uživatel
3 příspěvky
16. 11. 2013   #5
-
0
-

#3 Robo
Ahoj, děkuju za radu. Vytvářím to v .c, opravil jsem ten můj kód - teď vypadá takto

#include <stdio.h>

int main()
{
   char oper;
   double num1, num2;


   printf("Napiš co chceš vypočítat\n");
   scanf("%f%c%f", &num1, &oper, &num2);


   switch(oper)
   {
    case '+':
        printf("num1+num2=%.2f",num1+num2);
        break;
    case '-':
        printf("num1-num2=%.2f",num1-num2);
        break;
        case '*':
        printf("num1*num2=%.2f",num1*num2);
        break;
    case '/':
        if(num2 != 0)
        {
                    printf("num1/num2=%.2f",num1/num2);
            break;
        }
        else
        {
            printf("Error! Dělíte nulou.");
            break;
        }
    default:
        printf("Error! Špatně zadaný operátor.");
        break;
   }
   return 0;
}

Program se sice spustí ale neproběhne správně - konkrétně takto vypadá výstup:

Příklad výstupu:

Napiš co chceš vypočítat
4+1
num1+num2=0.00
Nahlásit jako SPAM
IP: 213.226.195.–
Řešení
Robo
~ Anonymní uživatel
82 příspěvků
16. 11. 2013   #6
-
0
-
Vyřešeno Nejlepší odpověď

#5 Anakin
To nevadilo že si to mal v .cpp. Ja len že názov operator sa používa v projektoch .cpp, čiže ty si musíš dať iný názov.
A k tvojmu problému. Nieje dobré načítavať veci hneď po sebe. A ešte k tomu, ty keď to zadávaš bez medzery, že zadáš 5,6+4,0 tak program neviem čo je prvé číslo a čo je druhé. Buď sa to odeluje medzerou 5 + 6 alebo podľa mňa je najlepšie s enterom.

 scanf("%lf", &num1);
 getchar();
 op = getchar();
 scanf("%lf", &num2);

načítaš do num1 prvé číslo a dáš enter. Ten enter ti stále trčí v bufferi, tak použiješ getchar() aby si ho načítal naprázdno (tým ho stadial odstrániš) . operátor nemusíš načítavať cez scanf, kedže sa jedná len o jeden znak. S num 2 je to podobné, ale v tomto prípade už nemusíš použiť getchar(), lebo tvoj program už nič ďaľšie nenačítava

Nahlásit jako SPAM
IP: 178.253.138.–
Anakin
~ Anonymní uživatel
3 příspěvky
16. 11. 2013   #7
-
0
-

#6 Robo
#2 vitamin

Tak jsem to tam implementoval. Kod vypada takto (pro zjednodušení jsem tam dal jen operace + a -):

#include <stdio.h>

int main()
{
   char oper;
   double a, b;

   printf("Napiš co chceš vypočítat\n");
   scanf("%lf", &a);
   getchar();
   oper = getchar();
   scanf("%lf", &b);

   switch(oper)
   {
    case '+':
        printf("a+b=%.2f",a+b);
        break;
    case '-':
        printf("a-b=%.2f",a-b);
        break;
    default:
        printf("Error! Špatně zadaný operátor.");
        break;
   }
   return 0;
}

Takhle vypadá  výstup - příklad:

Napiš co chceš vypočítat
4 + 1
num1+num2=5.00

Chtěl bych se vás ještě zeptat jak lze udělat aby v tom výstupu místo toho num1+num2=5.00 bylo 4+1=5

To je asi všechno, co by mne k tomuto tématu ještě zajímalo. MOC díky

Nahlásit jako SPAM
IP: 213.226.195.–
Robo
~ Anonymní uživatel
82 příspěvků
16. 11. 2013   #8
-
0
-

#7 Anakin
To aby ti to nevypisovalo 5.00 ale len 5, tak to sa asi príkazom spraviť nedá. Jedine že by si to dal do if a keď by to bolo celé číslo tak by si to vypísal ako %.lf a keď nie, tak by si to normálne vypísal %lf
(%.lf ti vypíše čísla pred desatinnou bodkou)
A aby ti to písalo čísla namiesto tvojich slov tak ich musíš dať jednoducho do printf

printf("%lf + %lf = %lf",num1, num2, num1+num2);
Nahlásit jako SPAM
IP: 178.253.138.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

Podobná vlákna

Kalkulacka — založil mravenec

Kalkulačka — založil anajkaa@seznam.cz

Kalkulacka — založil tomas

Kalkulačka — založil Lukáš

KALKULACKA — založil lUKAS

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý