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 15:00 | Zajímavý článek

    Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.

    Ladislav Hagara | Komentářů: 1
    9.5. 17:22 | Nová verze

    Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.

    Ladislav Hagara | Komentářů: 0
    9.5. 15:22 | Komunita

    Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.

    Ladislav Hagara | Komentářů: 0
    8.5. 19:22 | Nová verze

    Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    8.5. 18:00 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.

    Ladislav Hagara | Komentářů: 0
    8.5. 01:22 | Nová verze Ladislav Hagara | Komentářů: 0
    8.5. 00:55 | Zajímavý projekt

    PyXL je koncept procesora, ktorý dokáže priamo spúštat Python kód bez nutnosti prekladu ci Micropythonu. Podľa testov autora je pri 100 MHz približne 30x rýchlejší pri riadeni GPIO nez Micropython na Pyboard taktovanej na 168 MHz.

    vlk | Komentářů: 0
    7.5. 19:44 | Nová verze

    Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 12.0. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    7.5. 17:33 | Nová verze

    Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-05-06. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Pravděpodobně se jedná o poslední verzi postavenou na Debianu 12 Bookworm. Následující verze by již měla být postavena na Debianu 13 Trixie.

    Ladislav Hagara | Komentářů: 0
    7.5. 05:33 | Komunita

    Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.

    Ladislav Hagara | Komentářů: 17
    Jaký filesystém primárně používáte?
     (57%)
     (1%)
     (8%)
     (22%)
     (4%)
     (2%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 576 hlasů
     Komentářů: 26, poslední 8.5. 09:58
    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.