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í
×
    včera 23:55 | Humor

    Ve středu v 17:00 byl ve Francii zablokován přístup k PornHubu a dalším webům pro dospělé. K 17:30 došlo k nárůstu počtu registrací Proton VPN o 1 000 % [𝕏]. Dle nového francouzského zákona jsou provozovatelé těchto webů povinni ověřovat věk uživatelů prostřednictvím průkazu totožnosti nebo platební karty.

    Ladislav Hagara | Komentářů: 1
    6.6. 19:44 | Zajímavý článek

    Před 32 lety, 6. června 1993, byl spuštěn první český WWW server (ještě pod TLD .cs), pro potřeby fyziků zabývajících se problematikou vysokých energií.

    Ladislav Hagara | Komentářů: 4
    6.6. 16:11 | Zajímavý software

    Střílečku Borderlands 2 lze v rámci výprodeje série Borderlands na Steamu získat zdarma napořád, když aktivaci provedete do 8. června 19:00.

    Ladislav Hagara | Komentářů: 7
    6.6. 15:11 | Nová verze

    Byla vydána nová verze 2.22 svobodného video editoru Flowblade (GitHub, Wikipedie). Přehled novinek v poznámkách k vydání. Videoukázky funkcí Flowblade na Vimeu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    5.6. 15:00 | Komunita

    Canonical Launchpad vypíná systém správy verzí Bazaar. Vývojáři mohou své repozitáře do 1. září přemigrovat na Git.

    Ladislav Hagara | Komentářů: 7
    5.6. 13:22 | Nová verze

    Byla vydána nová verze 2.53.21 svobodného multiplatformního balíku internetových aplikací SeaMonkey (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 3
    5.6. 12:33 | Komunita Ladislav Hagara | Komentářů: 20
    5.6. 11:22 | Komunita

    Na Indiegogo byla spuštěna kampaň na podporu linuxového telefonu Liberux NEXX s osmijádrovým procesorem Rockchip RK3588S, 32 GB LPDDR4x RAM a 6.34″ 2400×1080 OLED displejem. Cena telefonu je 1 310 eur.

    Ladislav Hagara | Komentářů: 5
    5.6. 11:11 | Komunita

    Miro Hrončok vyhrál volby do Fedora Council. Mezi sedmi kandidáty, kteří se ucházeli o dvě křesla, nakonec získal nejvíce hlasů - 1089. Česká komunita má tak po delší době opět zástupce v nejvyšším orgánu Fedory.

    Ladislav Hagara | Komentářů: 0
    5.6. 04:33 | Zajímavý software

    Redox OS (Wikipedie), tj. mikrokernelový unixový operační systém naprogramovaný v programovacím jazyce Rust, nově podporuje X11 a GTK 3.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (55%)
     (33%)
     (7%)
     (2%)
     (0%)
     (0%)
     (3%)
    Celkem 222 hlasů
     Komentářů: 14, poslední 2.6. 08:30
    Rozcestník

    Dotaz: vypsání intervalu v ostrých závorkách

    13.11.2018 21:24 Kacka99
    vypsání intervalu v ostrých závorkách
    Přečteno: 1106×
    Ahoj mám problém a prosím o radu.

    Potřebuji udělat interval, který bude v ostrých závorkách < >. Používám na vypsání scanf a poté cyklus for, kde nejnižší hodnota je "a" a nejvyšší "b". Pokud však dám program spustit a napíšu ostré závorky a do nich čísla a nechám si celý cyklus (tedy interval) vypsat, program se zacyklí. Prosím, co s tím?

    Odpovědi

    13.11.2018 22:34 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Používám na vypsání scanf

    To asi ťažko.

    Skús sa spýtať ešte raz.
    13.11.2018 22:49 Kacka99
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    ten program vypadá takhle:

    int a,b;

    scanf("%d%d", &a, &b);

    for (int i = a; i <= b; i++)

    printf("%d", i);

    --------------------------------------------------------------------------

    když vkládám čísla, ze kterých chci udělat interval napíšu např. <1;5> a program se zacyklí.
    13.11.2018 22:37 sad
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Zkus tohle:
    #include <stdio.h>
    
    int main()
    {
        int min, max, i;
        char end[2];
        
        if (scanf("<%d,%d%1[>]", &min, &max, end) == 3)
        	for (i = min; i <= max; i++)
        		printf("%d\n", i);	
        
        return 0;
    }
    
    Funkce scanf vrací počet úspěšně načtených proměnných.
    13.11.2018 22:52 Kacka99
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Zkusím to, děkuji moc.
    13.11.2018 23:02 sad
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Akorát ten interval musíš zadat ve formátu <1,5> když budeš chtít formát <1;5>, tak ve scanf jen vyměníš tu čárku za středník.
    13.11.2018 22:55 Kacka99
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Napadlo mě, že bych to mohla udělat takto:

    int a, b;

    printf("<");

    scanf("%d%d", &a, &b);

    printf(">");

    ale to druhé printf se vypíše pod čísly, které vyberu, tedy neexistuje něco, co by nechalo vše na jednom řádku? Něco jako \n?
    14.11.2018 09:43 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    To si treba dobre naštudovať, ako funguje scanf().

    scanf() číta zo štandardného vstupu. Teda: a) nerobí výstup. b) scanf() začne spracovávať až dáta, ktoré mu "dodá terminál". Vnútorne je to trocha komplikované, ale na tej úrovni, na ktorej sa bavíme, to skrátka funguje tak, že scanf() začne niečo robiť až keď užívateľ stlačí Enter. Až vtedy zoberie postupnosť znakov, ktoré užívateľ naťukal a začne ich analyzovať a plniť premenné v tvojom prípade premenné 'a' a 'b'. Podstatné je, že v tom čase už terminál prijal stlačenie klávesy Enter a zareagoval na to tak, že posunul kurzor (miesto, kde sa napíše ďalší znak) na ďalší riadok. Preto sa ten znak > objaví na ďalšom riadku.

    Ďalšia vec: prvým argumentom funkcie scanf() je tzv. "formatovací reťazec". V tvojom prípade "%d%d". Ten rozhoduje o tom, ako sú znaky napísanú užívateľom "pochopené", analyzované a priradené do premenných 'a' a 'b'. V tomto formátovacom reťazci sú časti začínajúce znakom percento. '%d' hovorí, že postupnosť znakov sa bude interpretovať ako číslo zapísané v desiatkovej sústave. To má tiež svoje nuansy. Napr. čítanie čísla sa zastaví na prvom znaku, ktorý nemožno použiť ako číslicu. Napr. ak je na vstupe "123 456", tak čítanie prvého čísla zastaví po znaku '3', lebo znak medzera nie je možné použiť ako číslicu. Druhá vlastnosť: čítanie číslice preskakuje "biele znaky" (kam patrí aj medzera) na začiatku. Takže čítanie druhého čísla začne medzerou, tá sa preskočí a pokračuje sa číslicou 4 a skončí (neviditeľným ) znakom, ktorý tam dala klávesa Enter. Preto ak na vstup dám "123,456" tak prvé číslo sa prečíta, ale druhé nie, pretože znak ',' nepatrí medzi "biele znaky".

    No a nakoniec: formátovací reťazec scanf() môže obsahovať iné znaky, ktoré nemajú pred sebou znak percento a tie musia sedieť s tým, čo je na vstupe. Takže ak budem mať
    scanf("<%d,%d>",&a,&b)
    a na vstup napíšem
    <123,456>
    tak to zafunguje, ale užívateľ musí napísať aj znaky '<', '>' a ','. Ak tam dá napr. bodkočiarku, tak to nezafunguje, lebo bodkočiarka nie je čiarka. Ak tam dá miesto čiarky medzeru, tak to nezafunguje lebo čiarka vo formátovacom reťazci sa nenájde na vstupe. Ak dá medzeru na pred znak < tak to zasa nezafunguje, lebo formátovací reťazec začína znakom < a tam sa žiadne biele znaky nepreskakujú.

    Cvičenie #1: zafunguje?
    <123, 456>
    Cvičenie #2: zafunguje?
    <123 ,456>
    14.11.2018 10:21 Kacka99
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Teda děkuji moc, hned jak budu doma, zkusím to. A fakt moc díky za to vysvětlení všeho. :)
    14.11.2018 14:21 debian+
    Rozbalit Rozbalit vše Re: vypsání intervalu v ostrých závorkách
    Tvoje upravene na univerzalnejsie (upraveny kod uzivatela sad):
    #include <stdio.h>
    
    #define IS_NOT_NUMBER(a) (!((a) >= '0' && (a) <= '9'))
    
    /* vsetky ostatne znaky okrem cisiel riadku "zmaze" (nahradi medzerou) */
    void clean_on_number(char *buffer, size_t lenght)
    {
    	char *p;
    	
    	if(buffer == NULL)
    		return;
    	
    	for(p=buffer;*p != '\0'; p++)
    		if(IS_NOT_NUMBER(*p))
    			*p=' ';
    }
    
    int main(int argc, char **argv)
    {
        int min, max, i;
        
        char buffer[100];
        if(fgets(buffer, 100, stdin) != NULL)
        {
    		clean_on_number(buffer, 100);
    		sscanf(buffer, "%d %d", &min, &max);
        	for (i = min; i <= max; i++)
        		printf("%d\n", i);	
    	}
        
        return 0;
    }
    
    

    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.