Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Potrebujem pomôcť s C# - if, else

Ahoj, do školy mám spraviť program, ktorý mi vypočíta Ohmov zákon.
Mám 3 možnosti, ktoré mi vypočíta, R,U, alebo I, no vždy keď zadám hocijakú možnosť, tak mi to skočí na koniec a vypíše "Nezadal si ani jednu moznost".
Prosím, kde mám chybu? :.(

Tu mám aj zdrojový kód:

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

int main(int argc, char *argv[])
{
    int R,U,I;
    printf ("Vyber si co chces vypocitat (R,U,I) \n");
    switch (getche ())
    {
           case 'R':{
                    printf ("Zadaj U,I\n");
                    scanf  ("%f%D",U,I);
                    R=U/I;
                    printf ("R=%d\n\n", R);
                    } break;
                  
             case 'U':{
                      printf ("Zadaj R,I\n");
                      scanf  ("%D%D",R,I);
                      U=I*R;
                      printf ("U=%d\n\n",U);
                      } break;
                  
               case 'I':{
                        printf ("Zadaj U,R\n");
                        scanf  ("%D%D",U,R);
                        I=U/R;
                        printf ("I=%d\n\n",I);
                        } break;
               
                default: printf("Nezadal si ani jednu moznost\n");
                }
  system("PAUSE");	
  return 0;
}
Předmět Autor Datum
To ale není C#, jde o C. A opravdu při spuštění zadáváš velká písmena?
Wikan 12.01.2015 18:25
Wikan
Ospravedlňujem sa, som úplný začiatočník v programovaní. Áno, zadávam velké písmená.
rince111 12.01.2015 18:28
rince111
Místo getche() zkus getchar(). A začátečník nezačátečník, měl bys vědět, jaký jazyk vlastně používáš…
Wikan 12.01.2015 18:29
Wikan
Máš v tom programovaní riadny chaos. Keď si začiatočník - tak si najprv naštuduj to, čo chceš použív…
pme 12.01.2015 18:46
pme
int R,U,I, to je pěkná hovadina
Jakou 12.01.2015 21:05
Jakou
Aj to nejako vysvetlíš? Alebo sa len vyjadruješ k niečomu, čomu nerozumieš?
los 12.01.2015 22:10
los
vezmu merak, plochou baterku a odpor ze supliku U=4.5V I=0.023A => R=?? (vysvetlete rozdil toho, c…
gilhad 13.01.2015 01:12
gilhad
Lenže: 1. Problém, ktorý rieši autor otázky, nesúvisí s dátovými typmi. 2. Nikde nepíše, že by tam v…
los 13.01.2015 06:48
los
mám spraviť program, ktorý mi vypočíta Ohmov zákon 1. to nic nemeni na tom, ze "int U,I,R; je pekna…
gilhad 13.01.2015 16:28
gilhad
Mne to vysvetľovať nemusíš. Ten prvý výkrik do tmy a aj tá druhá hádanka sú autorovi otázky na dve v…
los 13.01.2015 17:40
los
vzhledem k tomu, ze stejne bude ten program predelavat, tak neskodi vedet dopredu, kde ma dalsi chyb…
gilhad 13.01.2015 20:21
gilhad
Je dosť možné, že takéto veci si odladí aj sám. Doteraz tu riešil iný problém.
los 13.01.2015 22:06
los
ptal se, kde ma chybu, tech chyb tam ma vic, int R,U,I; je jedna z tech dulezitejsich
gilhad 15.01.2015 16:21
gilhad
Ak tam vidíš nejaké ďalšie chyby, ktorých "tam má viac", tak mu môžeš poradiť konkrétne, nech má z t…
los 15.01.2015 19:18
los
ty formaty ve scanf-printf, ale to uz jsem psal, ze je musi prepsat. I takhle by s tim mel problem (…
gilhad 15.01.2015 20:04
gilhad
Pekne zhrnuté. Škoda, že autor otázky nám nedal vedieť, či sa so svojím problémom pohol ďalej. poslední
los 15.01.2015 20:20
los
Tak si tu navratovu hodnotu funkcie getche vypis. int ch; ch=getche(); printf ("%d\n", ch); switch (…
MM.. 13.01.2015 12:22
MM..

Lenže:
1. Problém, ktorý rieši autor otázky, nesúvisí s dátovými typmi.
2. Nikde nepíše, že by tam vymenil dátový typ za niečo iné, ani že za čo iné.
3. Aj keby chcel zmeniť dátový typ, tak nestačí zmeniť len tento riadok.
4. Použitý dátový typ môže byť úplne postačujúci pre takúto školskú úlohu. A aj keď zrejme nie je, tak tá "rada" je bez nejakého vysvetlenia dosť zmätočná.

mám spraviť program, ktorý mi vypočíta Ohmov zákon

1. to nic nemeni na tom, ze "int U,I,R; je pekna hovadina"

protoze v celych cislech to vetsinou neumozni zadat pozadovane hodnoty a i pokud umozni tak vetsinou neda spravny vysledek - a pritom to deklarovat jako neco pricetneho a %D zmenit na prislusnou hodnotu neda moc prace. Navic tam stejne pro nacitani int pouziva %f, takze nekde to opravit bude muset.

Podle Ohmova zakona kdyz mi pri napeti U=1V tece proud I=3A, tak odpor R rozhodne neni 0 - to by mi tekl proud nekonecny. A nekonecno je ponekud jinde nez 3A i pri hodne volnych kriteriich.

3. staci zmenit tento radek a opravit si ty parametry scanf/printf coz beztak bude muset, protoze ty nema spravne ani pro int.

4. ne, prave pro tuto ulohu vubec postacujici neni, protoze vetsinu bezne pouzivanych hodnot da vyrazne spatny vysledek a uloha neobsahuje omezeni "Pouzijte int, ackoli se pro tuto ulohu absolutne nehodi"

vzhledem k tomu, ze stejne bude ten program predelavat, tak neskodi vedet dopredu, kde ma dalsi chyby at nemusi tech dotazu sem psat milion. A ta hadanka (cti testcase) neni tak slozita a mel by na ni byt schopen odpovedet i bez prekladu toho programu (lepe receno chytnout se za nos a rict, aha, tohyle jsem nedomyslel, ze vstupem a/nebo vystupem by mohly byt i cisla necela, tak proto je int U,I,R; kravina, ze me to driv nenapadlo)

ty formaty ve scanf-printf, ale to uz jsem psal, ze je musi prepsat. I takhle by s tim mel problem (jednak %D=%ld ale uz prestava byt podporovane, je otazka, zda %ld vs. int je ta spravna velikost, druhak tam ma i %f, coz cpat do intu je opet blbost. A muze se stat, ze se to sice prelozi, ale bude to prepisovat i veci okolo (do menebytove promenne nacpu vic bytu cisla, i kdyz to navic budou treba nuly) a chovat se znacne podivne, zvlast pro nejake specialni hodnoty. Ale kdyz opravi to int R,U,I; tak by mel prepsat i tohle a tim to opravit taky. Coz uz jsem psal.)

system("PAUSE"); taky neni zcela idealni postup, i kdyz pro rychle domaci ukoly to funguje, tak by se to prilis pouzivat nemelo, rozhodne ne v necem vetsim. Viz treba diskuze tady
51841
a z ni odkazovana http://stackoverflow.com/questions/900666/system-c alls-in-c-and-their-roles-in-programming

Navic tady ten PAUSE ( a ten getche) z toho delaji celkem mozna zbytecne interaktivni vec, ktera se neda pouzit v davce, ale to je jen takovy stylisticky detail

ten default by mel vypsat, co teda clovek zadal

"zadej U,I" navadi na zadani "4.5,0.023", nebo jeste lepe cesky "4,5,0,023" kde to i po oprave na float padne kvuli te carce mezi tim, lepsi by bylo ptat se na ty dve hodnoty kazdou zvlast (obzvlaste, pokud se berou v uvahu locales, kdy podle jazyka muze byt desetinna tecka, nebo carka, tak neni vhodne hodnoty oddelovat jednou z nich). A je taky dobre uvest priklad zadani (zda chci "4.5", "4,5", "4.5V", "45x10e-1V" nebo jaky tvar) a osetrit si pricetnost vstupu (abych nedelil nulou, nemel zaporny odpor a tak podobne)

Tak si tu navratovu hodnotu funkcie getche vypis.
int ch;
ch=getche();
printf ("%d\n", ch);
switch (ch)
{ ....
...

a uvidis ascii kod toho co ti ta fcia vracia a tym padom uvidis aj preco ti nefunguje ten switch-case (t.j. jaku hodnotu mas testovat)

BTW. davas tam zbytocne zatvorky { } do case vetiev, nemaju tam ziaden zmysel.

Zpět do poradny Odpovědět na původní otázku Nahoru