NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Načtení proměné

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jirka
Člen
Avatar
Jirka:22.10.2017 17:10

Ahoj,
mohli byste mi prosím poradit, jak načtu v C znak z klávesnice?
Dělám jednoduchou kalkulačku a potřeboval bych do ní vkládat čísla.
Matně si pamatuji že v C# to bylo nějak takto "int x = 0; x = Convert.ToInt32(Con­sole.ReadLine);" a potřeboval bych k tomu nějaký C ekvivalent.
Děkuju moc.

 
Odpovědět
22.10.2017 17:10
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jirka
gcx11:22.10.2017 17:29

Ahoj, pročti si toto:
https://www.itnetwork.cz/…ypovy-system

V nižších jazycích je to složitější, že musíš předávat adresu paměti proměnné, do které to chceš ukládat.

 
Nahoru Odpovědět
22.10.2017 17:29
Avatar
Jirka
Člen
Avatar
Jirka:22.10.2017 18:02

Ahoj, děkuju za info. Něco jsem nastudoval, ale bohužel mi to napíše, že není názvem vnitřního ani vnějšího příkazu :( Kód mám takový. Asi tam někde bude chyba, dělal jsem kdysi jen okrajově C# a potřebuji teď na chvíli pro změnu C. Nevěděl bys prosím, co mám špatně?

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

int main(int argc, char ** argv)
{
        int operator, soucet, prvnicislo, druhecislo;
        printf("Zadej operator:\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n");

        printf("%d", operator);

        if (operator == 1)
        {
                print("Zadej prvni cislo:\n");
                printf("%d", prvnicislo);
                printf("Zadej druhe cislo:\n");
                printf("%d", druhecislo);
                soucet = prvnicislo + druhecislo;
                printf("Součet: %d", soucet);
        }
}
 
Nahoru Odpovědět
22.10.2017 18:02
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jirka
gcx11:22.10.2017 19:32

Ok, znovu:
V nižších jazycích je to složitější, že musíš předávat adresu paměti proměnné, do které to chceš ukládat. To se dělá přes ampersand (&). Navíc tam máš print místo printf.

Kód správně:

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

int main(int argc, char ** argv)
{
        int operator, soucet, prvnicislo, druhecislo;
        printf("Zadej operator:\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n");

        scanf("%d", &operator);

        if (operator == 1)
        {
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                soucet = prvnicislo + druhecislo;
                printf("Součet: %d", soucet);
        }
}
 
Nahoru Odpovědět
22.10.2017 19:32
Avatar
Jirka
Člen
Avatar
Jirka:22.10.2017 21:36

Ahoj,
děkuju, ale bohužel mi to nefunguje :( Promiň, jsem na programování úplně levej, potřeboval bych to jen prolítnout teď v semestru. Mám úplně jiný zaměření v IT...

 
Nahoru Odpovědět
22.10.2017 21:36
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jirka
gcx11:22.10.2017 22:29

Máš tam navíc " na konci názvu exe, dokonce to tam píše.

 
Nahoru Odpovědět
22.10.2017 22:29
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:22.10.2017 22:38

Zde je pár rad k tvé aplikaci kterou tvoříš:

  • Vkládej pouze ty hlavičkové soubory, jejichž funkci v programu používáš
  • Každou proměnnou zadávej na samostatný řádek a okomentuj ji
  • Výzvu "Zadej operátor" spojuj s funkcí pro vstup scanf()
  • Zadané číslo vkládej na řádek s výzvou o zadání čísla
  • Pro volbu z vícero položek využívej řízení pomocí switch nikoli if
  • Místo proměnné soucet použij proměnnou výsledek
  • Kontroluj, zda-li funkce vrací či nevrací hodnotu, používej return
Nahoru Odpovědět
22.10.2017 22:38
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jirka
Člen
Avatar
Odpovídá na gcx11
Jirka:28.10.2017 10:54

A jak to dám prosím pryč? Já jsem nikam " nepsal.

 
Nahoru Odpovědět
28.10.2017 10:54
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 10:37

Ahoj, tak jsem trošku pokročil, ale výsledek stále stejný :(
Pokud byste někdo dokázal poradit, tak budu rád.

#include <stdio.h> // umoznuje input a output komunikaci s uzivatelem, napr. funkci printf
#include <conio.h> // umoznuje pouzit napr. getch
#include <math.h>
#include <stdlib.h>

#define PI 3.148

int main(int argc, char ** argv)
{
        int operator;
        int soucet;
        int rozdil;
        int soucin;
        int podil;
        int sin;
        int cos;
        int tg;
        int pow2;
        int prvnicislo;
        int druhecislo;

        int val;
        val = PI / 180;

        printf("Zadej operator:\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n");

        scanf("%d", &operator);

        switch (operator)
        {

        case '1':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo); // funkce pro vstup
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                soucet = prvnicislo + druhecislo;
                printf("Součet: %d", soucet);
                return soucet;
                break;

        case '2':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                rozdil = prvnicislo - druhecislo;
                printf("Součet: %d", rozdil);
                return rozdil;
                break;

        case '3':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                soucin = prvnicislo * druhecislo;
                printf("Součet: %d", soucin);
                return soucin;
                break;

        case '4':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                podil = prvnicislo / druhecislo;
                printf("Součet: %d", podil);
                return podil;
                break;

        case '5':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                sin = sin(prvnicislo * val);
                printf("Součet: %d", sin);
                return sin;
                break;

        case '6':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                cos = cos(prvnicislo * val);
                printf("Součet: %d", cos);
                return cos;
                break;

        case '7':
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                tg = tg(prvnicislo * val);
                printf("Součet: %d", tg);
                return tg;
                break;

        default:
                printf("Neco je spatne...\n");
                break;
        }
}
 
Nahoru Odpovědět
29.10.2017 10:37
Avatar
Libor Šimo (libcosenior):29.10.2017 11:07

Nebude problem v tom, ze vo switchi pouzivas znak a zadavas cislo?
int a = 1;
char b = '1';

Nahoru Odpovědět
29.10.2017 11:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 12:20

Ahoj, neměl by. I když jsem odstranil uvozovky ' ', tak to stále padá. Zjistil jsem, že se mu asi nelíbí řádek scanf("%d", &operator); vč. toho switche, protože když jsem to zakomentoval, tak se to spustilo.
Ale co by v něm mohlo být špatně tedy nevím :(

 
Nahoru Odpovědět
29.10.2017 12:20
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:29.10.2017 12:47

K tvému programu:

  • hlavičkový soubor conio.h nepoužíváš, nevkládej ho
  • hodnota PI je chybná (PI 3.14159265)
  • spousta proměnných je zbytečných, hodnotu můžeš vypisovat přímo, stačí operator, prvnicislo, druhecislo
  • návratové hodnoty některých proměnných (sin, cos, tg) jsou špatně
  • jméno proměnné by nemělo být totožné se jménem funkce
  • proměnná val je zbytečná, můžeš ji implementovat přímo
printf("Vysledek: %f\n", sin(prvnicislo * PI / 180));
  • menu by mohlo být přesnější, např.
printf("MENU OPERACI\n\n");
printf("1 pro scitani\n");
printf("2 pro odecitani\n");
printf("3 pro nasobeni\n");
printf("4 pro deleni\n");
printf("5 pro sinus\n");
printf("6 pro cosinus\n");
printf("7 pro tangens\n");
printf("8 pro druhou mocninu\n\n");
  • při zadávání vstupu páruj výzvu spolu s očekávaným vstupem
printf("Vyber operaci: ");
scanf("%d", &operator);
  • Zadávání vstupu prováděj před příkazem switch
  • case hodnoty které porovnáváš ve switch příkazu zadávej jako číslo nikoli znak
  • příkaz return se ve switch nepoužívá a je v tomto případě nebezpečný. Vracíš tím hodnotu funkci main(). Nenulová hodnota obvykle představuje chybu.
  • pro výpočet tangentu se používá funkce tan()
  • Je dobré vypisovat konkrétně co je špatně
  • Chybí Ti výpočet druhé mocniny (operace č. 8)
Editováno 29.10.2017 12:50
Nahoru Odpovědět
29.10.2017 12:47
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 17:36

Ahoj, děkuju, ale bohužel se mi to pořád nedaří spustit :( Jsem na tom teď viz níže. Píše mi to pořád to stejné a nic to nepodtrhává.
Jinak promiň za ten mínus, byl to missclick. Nejde mi to teď překliknout na plus, tak to zkusím později.

#include <stdio.h> // umoznuje input a output komunikaci s uzivatelem, napr. funkci printf
#include <math.h>
#include <stdlib.h>

#define PI 3.14159265

int main(int argc, char ** argv)
{
        int operator;
        int soucet;
        int rozdil;
        int soucin;
        int podil;
        int sin;
        int cos;
        int tg;
        int pow2;
        int prvnicislo;
        int druhecislo;

        int val;
        val = PI / 180;

        printf("Menu operaci:\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n\n");

        scanf("%d", &operator);

        switch (operator)
        {

        case 1:
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo); // funkce pro vstup
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                soucet = prvnicislo + druhecislo;
                printf("Vysledek: %d", soucet);
                break;

        case 2:
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                rozdil = prvnicislo - druhecislo;
                printf("Vysledek: %d", rozdil);
                break;

        case 3:
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                soucin = prvnicislo * druhecislo;
                printf("Vysledek: %d", soucin);
                break;

        case 4:
                printf("Zadej prvni cislo:\n");
                scanf("%d", &prvnicislo);
                printf("Zadej druhe cislo:\n");
                scanf("%d", &druhecislo);
                podil = prvnicislo / druhecislo;
                printf("Vysledek: %d", podil);
                break;

                printf("Zadej cislo:\n");
                scanf("%d", &prvnicislo);
                sin = sinus(prvnicislo * val);
                printf("Vysledek: %d", sin);
                break;

        case 6:
                printf("Zadej cislo:\n");
                scanf("%d", &prvnicislo);
                cos = cosinus(prvnicislo * val);
                printf("Vysledek: %d", cos);
                break;

        case 7:
                printf("Zadej cislo:\n");
                scanf("%d", &prvnicislo);
                tg = tan(prvnicislo * val);
                printf("Vysledek: %d", tg);
                break;

        case 8:
                printf("Zadej cislo:\n");
                scanf("%d", &prvnicislo);
                pow2 = prvnicislo * prvnicislo;
                printf("Vysledek: %d", pow2);

        default:
                printf("Neco je spatne...\n");
                break;
        }
}
 
Nahoru Odpovědět
29.10.2017 17:36
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:29.10.2017 17:56

To co uvádíš není chyba tvého programu ale někde jinde. Zkus následující odkaz

chybova hlaska

Nahoru Odpovědět
29.10.2017 17:56
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:29.10.2017 18:06

Zde máš vyjádření mých rad a připomínek v podobě kódu:

#define _CRT_SECURE_NO_WARNINGS

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


#define PI 3.14159265

int main(int argc, char *argv[]){

        int operator;
        int prvnicislo;
        int druhecislo;

        printf("MENU OPERACI\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n\n");

        printf("Vyber operaci: ");
        scanf("%d", &operator);

        if ((operator > 0) && (operator < 9)) {
                printf("\nZadej cislo: ");
                scanf("%d", &prvnicislo);
                if ((operator > 0) && (operator < 5)) {
                        printf("Zadej druhe cislo: ");
                        scanf("%d", &druhecislo);
                }
        }
        else {
                printf("Neznama operace\n");
                exit(1);
        }

        switch (operator){
        case 1:
                printf("Vysledek: %d\n", prvnicislo + druhecislo);
                break;
        case 2:
                printf("Vysledek: %d\n", prvnicislo - druhecislo);
                break;
        case 3:
                printf("Vysledek: %d\n", prvnicislo * druhecislo);
                break;
        case 4:
                printf("Vysledek: %d\n", prvnicislo / druhecislo);
                break;
        case 5:
                printf("Vysledek: %f\n", sin(prvnicislo * PI / 180));
                break;
        case 6:
                printf("Vysledek: %f\n", cos(prvnicislo * PI / 180));
                break;
        case 7:
                printf("Vysledek: %f\n", tan(prvnicislo * PI / 180));
                break;
        case 8:
                printf("Vysledek: %d\n", prvnicislo * prvnicislo);
                break;
        default:
                printf("Neznama operace\n");
                break;
        }

        return 0;
}
Nahoru Odpovědět
29.10.2017 18:06
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na Jirka
Matúš Olejník:29.10.2017 18:06

Je to súbor .c alebo .cpp?

Nahoru Odpovědět
29.10.2017 18:06
/* I am not sure why this works but it fixes the problem */
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Matúš Olejník
DarkCoder:29.10.2017 18:09

Je to súbor .c alebo .cpp?

Je to samozřejmě soubor s koncovkou .c

Nahoru Odpovědět
29.10.2017 18:09
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jirka
Člen
Avatar
Odpovídá na DarkCoder
Jirka:29.10.2017 18:35

Děkuji ti moc. Dle návodu s chybovou hláškou bych to měl mít v pořádku. Středníky mi tam nikde nechybí.

C:\ProgramData\Oracle\Java\javapath;
C:\Program Files (x86)\Intel\iCLS Client\;
C:\Program Files\Intel\iCLS Client\;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files (x86)\Skype\Phone\;
C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\
 
Nahoru Odpovědět
29.10.2017 18:35
Avatar
Odpovídá na Jirka
Matúš Olejník:29.10.2017 19:26

Môžeš popísať ako sa snažíš spustiť ten program?

Nahoru Odpovědět
29.10.2017 19:26
/* I am not sure why this works but it fixes the problem */
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 19:28

CTRL + F5 - Start without debugging

 
Nahoru Odpovědět
29.10.2017 19:28
Avatar
Odpovídá na Jirka
Matúš Olejník:29.10.2017 19:38

Okey tak skús ísť do adresára projektu a vymaž celú zložku "Debug" daj znova build projektu a spusti. Ak to nepomôže vytvor projekt ešte raz a skús či to aj pri tom bude písať chybu.

Editováno 29.10.2017 19:39
Nahoru Odpovědět
29.10.2017 19:38
/* I am not sure why this works but it fixes the problem */
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 19:40

Pomohlo. To by mě v životě nenapadlo. Děkuju moc :-)

Edit: Tak ne, já zapomněl smazat ten #define _CRT_SECURE_NO_WAR­NINGS.

No každopádně kdyby se na to nepřišlo, tak by to až zas tak snad nevadilo, hlavně že to jede.

Editováno 29.10.2017 19:42
 
Nahoru Odpovědět
29.10.2017 19:40
Avatar
Odpovídá na Jirka
Matúš Olejník:29.10.2017 19:42

takže keď si tam mal #define _CRT_SECURE_NO_WAR­NINGS tak to ide a bez toho dáva tú istú chybu alebo ťa len upozorňuje na scanf()?

Editováno 29.10.2017 19:45
Nahoru Odpovědět
29.10.2017 19:42
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Jirka
Matúš Olejník:29.10.2017 20:01

Neviem či ti prišla notifikácia na editovanú správu, ale rád by som vedel ako si to myslel :D

Nahoru Odpovědět
29.10.2017 20:01
/* I am not sure why this works but it fixes the problem */
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2017 20:15

Když tam nechám to #define _CRT_SECURE_NO_WAR­NINGS, tak to nehodí žádnou chybu ani warning :-)

 
Nahoru Odpovědět
29.10.2017 20:15
Avatar
Jirka
Člen
Avatar
Jirka:4.11.2017 9:22

Ahoj,
nevíte prosím ještě jak udělat, aby se mi program po stisknutí Q ukončil? Dal jsem to do podmínky, ale vždy se vypíše ještě "neznámá operace" :(
Zkoušel jsem to různě zakomentovat, ale dopadlo to podobně.

Děkuju

#define _CRT_SECURE_NO_WARNINGS

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


#define PI 3.14159265

int main(int argc, char *argv[]) {

        int operator;
        int prvnicislo;
        int druhecislo;

        printf("MENU OPERACI\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n");
        printf("Q pro ukonceni programu\n\n");

        printf("Vyber operaci: ");
        scanf("%d", &operator);

        if ((operator > 0) && (operator < 9)) {
                printf("\nZadej cislo: ");
                scanf("%d", &prvnicislo);
                if ((operator > 0) && (operator < 5)) {
                        printf("Zadej druhe cislo: ");
                        scanf("%d", &druhecislo);
                        if (operator = "Q")
                        {
                                exit(1);
                        }
                }
        }
        else {
                printf("Neznama operace\n");
                exit(1);
        }

        switch (operator) {
        case 1:
                printf("Vysledek: %d\n", prvnicislo + druhecislo);
                break;
        case 2:
                printf("Vysledek: %d\n", prvnicislo - druhecislo);
                break;
        case 3:
                printf("Vysledek: %d\n", prvnicislo * druhecislo);
                break;
        case 4:
                printf("Vysledek: %d\n", prvnicislo / druhecislo);
                break;
        case 5:
                printf("Vysledek: %f\n", sin(prvnicislo * PI / 180));
                break;
        case 6:
                printf("Vysledek: %f\n", cos(prvnicislo * PI / 180));
                break;
        case 7:
                printf("Vysledek: %f\n", tan(prvnicislo * PI / 180));
                break;
        case 8:
                printf("Vysledek: %d\n", prvnicislo * prvnicislo);
                break;
        /*default:
                printf("Neznama operace\n");
                break;*/
        }

        return 0;
}
 
Nahoru Odpovědět
4.11.2017 9:22
Avatar
Jirka
Člen
Avatar
Jirka:4.11.2017 10:12

Ahoj ještě jednou. Program jsem trochu poupravil podle zadání ze školy. Potřeboval bych prosím poradit, jak ho ukončit stisknutím Q a pokud nezadám Q, tak aby se po zadání druhé hodnoty a vypočtení výsledku neukončil, ale hodil zpět na začátek. Pak už to snad bude vše a přestanu otravovat :-)
Děkuju moc.

Kód je nyní takový:

#define _CRT_SECURE_NO_WARNINGS

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


#define PI 3.14159265

int main(int argc, char *argv[]) {

        int operator;
        int prvnicislo;
        int druhecislo;

        printf("Zadej cislo: ");
        scanf("%d", &prvnicislo);

        printf("\nMENU OPERACI\n\n");
        printf("1 pro scitani\n");
        printf("2 pro odecitani\n");
        printf("3 pro nasobeni\n");
        printf("4 pro deleni\n");
        printf("5 pro sinus\n");
        printf("6 pro cosinus\n");
        printf("7 pro tangens\n");
        printf("8 pro druhou mocninu\n");
        printf("Q pro ukonceni programu\n\n");

        printf("Vyber operaci: ");
        scanf("%d", &operator);

        switch (operator) {
        case 1:
                printf("Zadej druhe cislo: ");
                scanf("%d", &druhecislo);
                printf("Vysledek: %d\n", prvnicislo + druhecislo);
                break;
        case 2:
                printf("Zadej druhe cislo: ");
                scanf("%d", &druhecislo);
                printf("Vysledek: %d\n", prvnicislo - druhecislo);
                break;
        case 3:
                printf("Zadej druhe cislo: ");
                scanf("%d", &druhecislo);
                printf("Vysledek: %d\n", prvnicislo * druhecislo);
                break;
        case 4:
                printf("Zadej druhe cislo: ");
                scanf("%d", &druhecislo);
                printf("Vysledek: %d\n", prvnicislo / druhecislo);
                break;
        case 5:
                printf("Vysledek: %f\n", sin(prvnicislo * PI / 180));
                break;
        case 6:
                printf("Vysledek: %f\n", cos(prvnicislo * PI / 180));
                break;
        case 7:
                printf("Vysledek: %f\n", tan(prvnicislo * PI / 180));
                break;
        case 8:
                printf("Vysledek: %d\n", prvnicislo * prvnicislo);
                break;
        default:
                printf("Neznama operace\n");
                break;
        }
        return 0;
}
 
Nahoru Odpovědět
4.11.2017 10:12
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Jirka
Honza Bittner:4.11.2017 10:23

V tom případě nebudeš chtít načítat celé číslo, ale znak. (to je %c)

Zároveň vůbec neošetřuješ návratovou hodnotu scanfu, což bys určitě měl.

Pro opakování dokud nezadáš Q přeci stačí vnořit kód do while cyklu.

Nahoru Odpovědět
4.11.2017 10:23
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Jirka
Člen
Avatar
Jirka:4.11.2017 11:31

Ahoj,
s tím znakem se mi to nedaří. Potřeboval bych tam mít volby 1-9 a Q.
Ale když se 1-9 používá %d, tak já bych potřeboval něco, co obsáhne to 1-9 a zárověň i Q. Jde to nějak udělat?
While jsem nezkoušel a nevím jak na něj - jsem v tom opravdu úplně v začátcích.

 
Nahoru Odpovědět
4.11.2017 11:31
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:4.11.2017 11:57

Vše bylo řečeno v předchozím příspěvku. I čísla 1-9 stejně jako Q jsou znaky.

char operator;

operator = getchar();

switch (operator) {
        case '1':
                printf("Zadej druhe cislo: ");
                scanf("%d", &druhecislo);
                printf("Vysledek: %d\n", prvnicislo + druhecislo);
                break;
        // atd.
 }

cyklus do-while

do {
        // neco
} while (operator!='Q');

Pozn: Programovací jazyk C rozlišuje velikost písmen, tak na to pamatovat
Nahoru Odpovědět
4.11.2017 11:57
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 30 zpráv z 30.