abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 14:44 | Komunita

Mozilla.cz informuje, že Firefox bude možná upozorňovat na úniky vašich hesel. V Mozille prototypují upozorňování na únik informací o vašem účtu, pokud se na seznamu Have I been pwned? objeví služba, ke které máte ve Firefoxu uložené přihlašovací údaje. Informace se objevila v pravidelném newsletteru o vývoji Firefoxu.

Ladislav Hagara | Komentářů: 5
dnes 00:22 | Bezpečnostní upozornění

Společnost ZONER informuje o bezpečnostním incidentu, při kterém došlo ke zcizení a zveřejnění části přihlašovacích údajů zákazníků k elektronické poště a webhostingu CZECHIA.COM.

Ladislav Hagara | Komentářů: 0
včera 23:44 | Nová verze

Byla vydána nová stabilní verze 1.13 (1.13.1008.32) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují možnost zobrazení otevřených i uzavřených listů pomocí ikonky Okno na postranní liště a vylepšené stahování (YouTube). Nejnovější Vivaldi je postaveno na Chromiu 62.0.3202.97.

Ladislav Hagara | Komentářů: 8
včera 20:55 | Nová verze

Byla vydána verze 2017.3 dnes již průběžně aktualizované linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux. Aktualizovat systém lze pomocí příkazů "apt update; apt dist-upgrade; reboot". Z novinek lze zmínit 4 nové nástroje: InSpy, CherryTree, Sublist3r a OSRFramework.

Ladislav Hagara | Komentářů: 1
včera 01:55 | Bezpečnostní upozornění

Společnost Uber potvrdila bezpečnostní incident a únik dat v roce 2016. Unikly údaje o 57 milionech cestujících (jména, emailové adresy a čísla mobilních telefonů) a 600 tisících řidičích (navíc čísla řidičských průkazů).

Ladislav Hagara | Komentářů: 1
21.11. 23:44 | Humor

Co vypíše příkaz man půl hodiny po půlnoci? Text "gimme gimme gimme". Jedná se o virtuální velikonoční vajíčko připomínající skupinu ABBA a její hit Gimme! Gimme! Gimme! (A Man After Midnight). Problém nastane, pokud gimme gimme gimme nabourá automatizované testování softwaru. To se pak příkaz man musí opravit [Bug 1515352] [reddit].

Ladislav Hagara | Komentářů: 10
21.11. 18:11 | Zajímavý článek

Mozilla.cz informuje, že Firefox na Fedoře podporuje Client Side Decorations. Firefox na Linuxu se vykresluje včetně standardního záhlaví okna, které je v případě webového prohlížeče většinou nadbytečné a ubírá drahocenné vertikální místo na obrazovce. Verze distribuovaná uživatelům Fedory však nyní obsahuje experimentální podporu pro takzvané Client Side Decorations, které umožňují vykreslování „oušek“ panelů do záhlaví okna.

Ladislav Hagara | Komentářů: 12
21.11. 05:00 | Bezpečnostní upozornění

Maxim Goryachy a Mark Ermolov ze společnosti Positive Technologies budou mít v prosinci na konferenci Black Hat Europe 2017 přednášku s názvem "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". O nalezeném bezpečnostním problému informovali společnost Intel. Ta bezpečnostní problém INTEL-SA-00086 v Intel Management Engine (ME), Intel Server Platform Services (SPS) a Intel

… více »
Ladislav Hagara | Komentářů: 43
21.11. 01:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Java. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více 10 elektronických knih a za 15 dolarů a více 15 elektronických knih věnovaných programovacímu jazyku Java od nakladatelství O'Reilly. Peníze lze libovolně rozdělit mezi nakladatelství O'Reilly, neziskovou organizaci Code for America a Humble Bundle.

Ladislav Hagara | Komentářů: 0
21.11. 00:11 | Zajímavý projekt

Článek na OMG! Ubuntu! představuje rodinu písma IBM Plex. Jedná se o open source písmo (GitHub) navržené a uvolněné společností IBM (YouTube, Carbon Design System). Ukázka na Font Squirrel.

Ladislav Hagara | Komentářů: 14
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 756 hlasů
 Komentářů: 37, poslední 21.11. 15:21
    Rozcestník

    Dotaz: Kalkulačka v jazyku C s jasně zadaným vstupem

    19.11.2013 14:37 anakin
    Kalkulačka v jazyku C s jasně zadaným vstupem
    Přečteno: 1461×
    Ahoj, mohl by mi někdo prosím vylepšit můj kód aby splňoval tato kritéria:

    1)Vstup je jasně daný: a oper b, kde a a b jsou typu double, oper je +,-,* nebo /

    Přičemž program ignoruje mezery mezi jednotlivými vstupy - příklad: 3 + 1 program interpretuje jako 3+1 nehledě na to že uživatel zadal mnoho mezer mezi jednotlivými vstupy

    2) Pokud uživatel zadá nějaký nesmysl - například 4 nebo 3a a zmáčkne ENTER tak se objeví chybová hláška

    Takto vypadá můj současný kód:

    int main()
    {
       char oper;
       double a, b;
    
       printf("Napiste co chcete vypocitat\n");
       scanf("%lf", &a);
       getchar();
       oper = getchar();
       scanf("%lf", &b);
    
       switch(oper)
       {
        case '+':
            printf("%f+%f=%.2f",a,b,a+b);
            break;
        case '-':
            printf("%f-%f=%.2f",a,b,a-b);
            break;
        case '*':
            printf("%f*%f=%.2f",a,b,a*b);
            break;
        case '/':
            if(b != 0)
            {
                        printf("%f/%f=%.2f",a,b,a/b);
                break;
            }
            else
            {
                printf("Error! Delite nulou.");
                break;
            }
        default:
            printf("Error! Spatne zadany operator.");
            break;
       }
       return 0;
    }


    Řešení dotazu:


    Odpovědi

    Josef Kufner avatar 19.11.2013 15:04 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    char oper[2] = {0, 0};
    double a, b;
    if (3 == scanf("%lf %1[+/*-] %lf", &a, &oper, &b)) {
        printf("%f %c %f = %.2f\n", a, oper[0], b, a + b);
    } else {
        fprintf(stderr, "Nejaka blbost.\n");
    }
    Hello world ! Segmentation fault (core dumped)
    19.11.2013 15:20 potato
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Jo, pravda, %[ ukládá ještě na konec NUL, takže moje řešení je blbě...
    19.11.2013 15:17 potato
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    scanf() je mnohem inteligentnější, než se obecně ví...
        double a, b;
        char op;
    
        if (scanf("%lf %1[-+/*] %lf", &a, &op, &b) != 3)
            printf("Error.\n");
        else {
            /* ... */
        }
    
    19.11.2013 15:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    scanf() je mnohem inteligentnější, než se obecně ví...
    Ještě ho naučit, že tečka i čárka u plavacích čísel totéž je (ehm tedy desetinný oddělovač, bez ohledu na locale) a bylo by vystarané...
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    20.11.2013 09:16 dword
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    jeste ze mame roury a sed
    20.11.2013 10:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    To je k ničemu, je to o tom, že prostě nelze jednoduše řádkově žádat vstup uživatele. Je třeba si to sám upravovat, protože lidi mají různé nastavení a různé aplikace, používají různé vstupy a rozlišit kdy kde tečku nebo čárku v krajích česko-německých je na zblbnutí...
    Zjednodušeně musíš vzít řetězec místo čísla, zjistit si co tam má být, udělat harakiry, a přehnat to přes nějakou scanf fci, pak teprve máš user-friendly zadávaní vstupu.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    19.11.2013 18:12 anakin
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    JJ. To funguje perfektně. To pole+scanf je geniální řešení pro to ignorování mezer, přesto mi vrtá hlavou proč tam nefunguje to printf(error) v případech pokud zadám vstup tohoto typu např.: 394 a zmáčknu ENTER tak se mi ta hláška ERROR nechce zobrazit, zatímco pokud zadám 3 56 nebo CauLidi tak se hláška ERROR zobrazí. Nevíte v čem je problém?
    19.11.2013 19:00 axel
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    scanf neni prilis vhodny nastroj pro tento ukol. Lepe receno tak jak je formulovan by snad sel resit (neni tam ale potencialni problem s arithmetic overflow?), ale obecne parsovat stdin pomoci scanf nekonci dobre. Napsal bych si parsing komplet jako jednoduchy automat a jeste bych si pri tom procvicil cecko, coz je asi smyslem tohoto zadani:-)
    19.11.2013 19:56 potato
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Jaký problém s arithmetic overflow? Program samozřejmě korektně načítá i výrazy jako 1+inf, nan/nan a podobně.

    Napsát správné parsování a konverzi čísel s plovoucí řádovou čárkou není žádné jednoduché cvičení.
    21.11.2013 10:16 axel
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Treba pro integer tento problem nastava (zada se dlouha posloupnost cislic a nacte se nesmysl), s tim jsem se primo setkal. Mozna pro double to je osetrene a nenastava to, s tim zkusenost nemam a patrat se mi po tom nechce:-)
    19.11.2013 19:25 potato
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Hm, ano, problém je validní leč neúplný vstup, protože se má něco stát hned po Enteru, ne na konci vstupu. V tom případě je možné třeba číst po řádcích (např. pomocí getline()) a použít sscanf() na ten řádek.
    19.11.2013 19:56 anakin
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Zkoušel jsem toto:
    
    int main()
    {
       char oper;
       double a, b;
       char buffer[256];
    
       printf("Napiste co chcete vypocitat\n");
       fgets(buffer, 256, stdin);
       if (sscanf("%lf %1[-+/*] %lf", &a, &oper, &b) != 3)
            printf("ERROR.\n");
       else
            { .... zbytek kódu je stejný....
    
    Problémem ale teď je že pokud zadám normální vstup
    3 + 1
    tak to zmrzne jako předtím.

    Ovšem když zadám
    3458
    tak se doopravdy objeví ERROR

    Mohli byste mi to prosím vysvětlit a opravit?
    Řešení 1× (anakin (tazatel))
    Josef Kufner avatar 19.11.2013 20:00 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    sscanf(buffer, …
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 19.11.2013 19:59 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Druhou možností je lépe specifikovat mezery:
    scanf("%lf%*[ \t]%1[+/*-]%*[ \t]%lf", &a, &oper, &b)
    Ale jinak se mi taktéž osvědčilo nejdříve načíst řádek a pak teprve ho parsovat. Pokud konec řádku nese význam, je to spolehlivější a lépe to reaguje na chyby ve vstupu.
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 19.11.2013 20:04 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Kalkulačka v jazyku C s jasně zadaným vstupem
    Pokud to však chceš udělat opravdu pěkně, přečti si zdejší seriál Jazyky a překladače. Najdeš tam, jak to udělat tak, aby fungovaly například i závorky a libovolný počet operátorů, včetně jejich priorit.
    Hello world ! Segmentation fault (core dumped)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.