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

Kalkulačka v C s nejednoznačným vstupem – C / C++ – Fórum – Programujte.comKalkulačka v C s nejednoznačným vstupem – C / C++ – Fórum – Programujte.com

 

Jan
~ Anonymní uživatel
187 příspěvků
26. 3. 2016   #1
-
0
-

Dobrý den,

jsem začátečním v C a řeším problém, jakým způsobem zapsat scanf vstupu, který není jednoznačně určen, co má očekávat. Píšu kalkulačku, kde uživatel zadá pro + - * / příklad ve formátu 53+6 a vyhodí mu to výsledek. Toto jsem zapsal scanf("%f%c%f", &num1,&oper,&num2) a funguje to. Problém nastává při odmocnině i mocnině (vždy druhá moc. i odm.) - mým úkolem je po zadání příkladu ve formátu odm 16 nebo moc 4 vyhodit výsledek. Mocnina i odmocnina bohužel musí zůstat v tomto formátu, jde o školní práci.

Jakým způsobem upravit scanf, abych pokryl obě dvě možnosti najednou?

Děkuji,

Jan

Nahlásit jako SPAM
IP: 178.255.168.–
ondrej39+1
Věrný člen
26. 3. 2016   #2
-
0
-

#1 Jan
Prosím tě, nejdi na to způsobem, že jedna funkce musí dělat všechno. To je úplně špatně. Je zcela běžné, že se programy na základě různých vstupů větví do různých větví, které vědí, jak s danými vstupy pracovat. To stejné udělat i u sebe.

Projdi si vstupní string, když v něm najdeš moc, pošli celý vstup do funkce, která umí umocňovat číslo, když v najdeš odm, pošli vstup do funkce, který umí čísla odmocňovat a když v něm tyto dva příznaky nenajdeš, pošli vstup do funkce, která ví, jak sčítat/odčítat/násobit/dělit zadaná čísla.

Téměř všechny problémy se při programování řeší dekompozicí na jednodušší celky a teprve z nich se následně skládají složitější věci, protože i kdybys někdy mohl napsat nějakou šílenost, co ti pokryje všechny případy, zpravidla to není vhodné, protože takový kód po tobě nikdo nebude chtít číst.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Jan
~ Anonymní uživatel
187 příspěvků
28. 3. 2016   #3
-
0
-

Ondřeji děkuji za reakci. Zkoušel jsem všechno možné, ale stále mě nenapadlo řešení, které by fungovalo. Byl byste tak hodný a zkusil mě trošku postrčit? Nevím jakou funkci použít, která rozpozná text "moc/odm" od čísel tak, abych s tím mohl dále pracovat.

Nahlásit jako SPAM
IP: 178.255.168.–
Jan
~ Anonymní uživatel
187 příspěvků
28. 3. 2016   #4
-
0
-

 Tady je má dosavadní práce, funguje to bez problému; teď bych k tomu potřeboval implementovat i mocninu a odmocninu...

if(scanf("%f%c%f",&x,&oper,&y)==3)
    		  {
        	  switch(oper)
        	  {
                case '+': printf("%f", x+y);
                break;
                case '-': printf("%f", x-y);
                break;
                case '*': printf("%f", x*y);
                break;
                case '/':
				if(y==0)
				{
				  printf("Nelze dělit nulou.\n");
				}
				else
				{
				  printf("%f", x/y);
				}
                break;
                default: printf("Zadal jsi spatny operator.\n");
        	  }
    		  }
    		  else
    		  {
        	    printf("\nZadal jsi priklad ve spatnem formatu.\n");
    		  }
Nahlásit jako SPAM
IP: 178.255.168.–
vitamin+8
Grafoman
29. 3. 2016   #5
-
0
-

Skús niečo takéto:

char str[50], op[50];

fgets(str, 50, stdin);    //nacitaj si vstup do stringu neh ho mozes pouzit viacej krat

if(sscanf(str, "%f%c%f",&x,&oper,&y)==3){

    ///tvoj switch...
}
else if(sscanf(str, "%s%f",&op,&x)==2){
    if(strcmp(op, "odm")){
        ///...
    }
    else if(strcmp(op, "moc")){
        ///...
    }
}

Ak to budeš neskôr rozširovať o zátvorky, komplikovanejšiu aritmetiku a priority operátorov tak sa to rieši cez vlastný parser 

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
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, 12 hostů

Podobná vlákna

Problem se vstupem do programu — založil vyhnanek

Problém se vstupem a výstupem ze souboru v C — založil Anonymní uživatel

Kalkulačka — založil Anakin

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ý