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 01:44 | Komunita

    Spotify prostřednictvím svého FOSS fondu rozdělilo 70 000 eur mezi tři open source projekty: FFmpeg obdržel 30 000 eur, Mock Service Worker (MSW) obdržel 15 000 eur a Xiph.Org Foundation obdržela 25 000 eur.

    Ladislav Hagara | Komentářů: 1
    včera 18:11 | Zajímavý software

    Nazdar! je open source počítačová hra běžící také na Linuxu. Zdrojové kódy jsou k dispozici na GitHubu. Autorem je Michal Škoula.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Po více než třech letech od vydání verze 1.4.0 byla vydána nová verze 1.5.0 správce balíčků GNU Guix a na něm postavené stejnojmenné distribuci GNU Guix. S init systémem a správcem služeb GNU Shepherd. S experimentální podporou jádra GNU Hurd. Na vývoji se podílelo 744 vývojářů. Přibylo 12 525 nových balíčků. Jejich aktuální počet je 30 011. Aktualizována byla také dokumentace.

    Ladislav Hagara | Komentářů: 4
    včera 15:44 | Zajímavý software

    Na adrese gravit.huan.cz se objevila prezentace minimalistického redakčního systému GravIT. CMS je napsaný ve FastAPI a charakterizuje se především rychlým načítáním a jednoduchým ukládáním obsahu do textových souborů se syntaxí Markdown a YAML místo klasické databáze. GravIT cílí na uživatele, kteří preferují CMS s nízkými nároky, snadným verzováním (např. přes Git) a možností jednoduchého rozšiřování pomocí modulů. Redakční

    … více »
    2012 | Komentářů: 0
    včera 12:55 | Zajímavý software

    Tým Qwen (Alibaba Cloud) uvolnil jako open-source své modely Qwen3‑TTS pro převádění textu na řeč. Sada obsahuje modely VoiceDesign (tvorba hlasu dle popisu), CustomVoice (stylizace) a Base (klonování hlasu). Modely podporují syntézu deseti různých jazyků (čeština a slovenština chybí). Stránka projektu na GitHubu, natrénované modely jsou dostupné na Hugging Face. Distribuováno pod licencí Apache‑2.0.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 01:11 | Nová verze

    Svobodný citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 8. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    22.1. 16:55 | Nová verze

    Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    22.1. 14:00 | Komunita

    Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.

    Ladislav Hagara | Komentářů: 8
    22.1. 11:00 | IT novinky

    Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.

    Ladislav Hagara | Komentářů: 2
    22.1. 10:22 | Zajímavý software

    Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.

    Ladislav Hagara | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (6%)
     (0%)
     (10%)
     (21%)
     (3%)
     (5%)
     (2%)
     (11%)
     (35%)
    Celkem 584 hlasů
     Komentářů: 17, poslední 22.1. 15:24
    Rozcestník

    Dotaz: cyklus while a podivne spravanie

    13.12.2005 19:55 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    cyklus while a podivne spravanie
    Přečteno: 151×
    mam strasne neprijemny problem ktory ma brzdi pri zadani do skoly a preto hladam pomoc...neviem akym zazrakom ale ked tento program pustim a zadam 'b' tak mi do premennej pocet ulozi 1...avsak ked ten cyklus bezi dalej tak mne z neznameho dovodu premennu pocet vynuluje.. :(
    #include malloc.h
    #include stdio.h
    #include stdlib.h
    typedef struct {
      char meno[10];
      char priez[20];
      int oscislo;
      char znamka;
    } STUD;
    
    void vlozStud(int *pocet) {
      (*pocet)++;
    }
      
    
    int main() {
      
      int pocet;
      char vyber;
      
      pocet=0;
    	
      STUD *student;
      student=(STUD *) malloc(1*sizeof(student));
      
     
      printf("%d\n",pocet);
      while (vyber!='x') { 
        scanf("%s",&vyber);
        if(vyber=='b') vlozStud(&pocet);
        printf("%d",pocet);
      }
      
      printf("%d",pocet);
      
      return (0);
    }
    
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."

    Odpovědi

    13.12.2005 20:00 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    zabudol som ze pracujem v Anjute pod linuxami a najhorsie je ze pod win to ide :(
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    David Watzke avatar 13.12.2005 20:07 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Nehodí kompilátor nějakej warning? Nepíšou se includy mezi < a >?
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    13.12.2005 20:09 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    no to je jasný, jenže zkus si to zadat na ABCLinuxu s těma < a > ... :-)
    13.12.2005 20:18 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    No a na co jsou asi nad polem pro zadávání příspěvku tlačítka '<' a '>'? Pro ty línější nabízím pomůcku, kterou jsem kdysi vyrobil kvůli starému redakčnímu systému Intervalu, ale hodí se i zde.
    13.12.2005 20:21 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    hmm....ospravdlnujem sa to som si nevsimol ... :)
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    13.12.2005 20:08 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    hint: kterým znakem končí v c-čku stringy?
    13.12.2005 20:22 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    hmm...no nerozumiem resp. asi neviem na to vobec odpoved
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    13.12.2005 21:10 Martin Tůma | skóre: 39 | blog: RTFM | Praha
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie

    Snažíš se zapsat řetězec na místo znaku. I když z klávesnice zadáš jenom "b", tak funkce scanf("%s", &vyber) na adresu &vyber uloží "b\0" (C-čkové řetězce jsou zakončeny znakem "\0"). A ten nulovej znak přepíše něco, co už nepatří k tomu charu. (V tvém případě proměnnou pocet)

    To, že na windows to funguje je způsobený pravděpodobně "zarovnávánim" proměných v paměti, který provádí překladač - zapisuješ někam, kde by stejně nic nebylo.

    Každý má právo na můj názor!
    13.12.2005 20:14 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
      scanf("%s",&vyber);
    

    Tak takové věci si raději hodně rychle odvykněte. Termín buffer overflow už jste slyšel? Tohle by byla sebevražda i kdyby proměnná vyber nebyla typu char.

    13.12.2005 20:23 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    ok beriem a budem pamatat ale ako to ma byt spravne? resp. ako to riesit??
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    David Watzke avatar 13.12.2005 20:24 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Jak to má být správně? Takhle to je i v učebnici... no, v jiném spojení.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    13.12.2005 20:27 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Máte pointer na proměnnou typu char a na místo, kam ukazuje, zkopírujete zadaný řetězec. Takže prvním znakem naplníte tu proměnnou a zbytkem přepíšete pár bytů za ním. Když budete mít štěstí, bude to pár jiných proměnných. Když ne, mohou se začít dít podivuhodné věci… V případě tazatele to zřejmě odnesla proměnná pocet, která se nacházela na zásobníku hned nad vyber.
    13.12.2005 20:39 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    hmm...ok tak prosim ako to zapisat spravne? ale inak len tak mimo ze to pod win ide a to ma tiez hneva lebo pod win sa mi moc ten program pisat nechce...resp. nemam to cim prelozit a v com pisat...prosim dalo by sa navrhnut nejake riesenie konkretne presny zapis? inak ked tam dam namiesto scanf("%s",&vyber) scanf("%c",&vyber) tak mi to nevynuluje premennu pocet ale ten cyklus ide vzdy dvakrat namiesto toho aby si zakazdym vypytal zadat znak...
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    13.12.2005 20:48 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Asi byste si měl nejdřív zjistit, co vlastně děláte. Tedy nastudovat si z jakékoli učebnice jazyka C něco o tom, jaká je standardní reprezentace řetězců v jazyce C, co je to pointer a co dělá funkce scanf(). Bez toho to nepůjde a pokud si toto nastudujete, bude vám hned jasné, v čem je problém. Fórum vám může pomoci s konkrétním problémem, ale základy jazyka si musíte nastudovat sám.
    13.12.2005 21:10 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    no mne je jasne to ze pod windowsackym compilerom to ide tak preto ma zaujima v com je problem....mne je jasne co je pointer aj co robi scanf ale ked mi nieco nejde tak skusam a vidim ze to pod win ide :(
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    13.12.2005 21:25 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Na začátku cyklu proměnná "vyber" není inicializována, takže je celkem náhoda, že to nějak funguje. Dále, "vyber" nesmí být "char", ale "pointer na char", tedy
    char *vyber;
    
    No a když je to takhle inicializováno, tak je potřeba paměť naalokovat
    int N = 20;
    vyber = (char *) malloc (N * sizeof(char));
    
    a po použití uvolnit
    free(vyber);
    
    Přičemž NIKDY nepoužívej scanf() tak jak jsi to zapsal. Když už to mermomocí musíš napsat právě takto, tak aspoň
    scanf ("%19s", vyber);
    
    Abys omezil možnost buffer-overflow.
    13.12.2005 22:05 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    ok dakujem velmi pekne skusim .....ale aj tak ma zaraza ze pod win to v poho funguje...a ze nie je inicializovana to som len zabudol moja chyba ale mam to tam.. :)
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."
    13.12.2005 22:27 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    To, že to ve windows funguje, je opravdu náhoda. Každá platforma je trochu jiná. Céčko je trochu zrádné v tom, že špatně napsaný program někdy funguje, jindy zase ne, chová se "záhadně" v závislosti na ledasčem a dost špatně se hledají chyby.

    Kdo s Céčkem teprve začíná, tak má dvojnásob složitou situaci. Jednak tápe, ale také používá "školské" ukázkové příklady, které jsou paměťově nenáročné a všechno se odehrává v zásobníku. Tam vznikají pravé záhady.

    Zatímco když hrábneš někam daleko do paměti, která není tvoje, tak tě systém hned odstřelí a člověk hned ví, na čem je (teda někdy).

    No nic, zkus tohle řešení:
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct {
      char meno[10];
      char priez[20];
      int oscislo;
      char znamka;
    } STUD;
    
    void vlozStud(int *pocet) {
      (*pocet)++;
    }
    
    
    int main() {
      
      int pocet, N = 20;
      char *vyber;
      STUD *student;
      
      pocet=0;
    	
      student=(STUD *) malloc(1*sizeof(student));
      vyber = (char *) malloc(N*sizeof(char));
     
      printf("%d\n",pocet);
      
      while(1){ 
        scanf("%19s", vyber);
        if (!strcmp(vyber, "x")) break;
        if (!strcmp(vyber, "b")) vlozStud(&pocet);
        printf("%d",pocet);
      }
      
      printf("%d",pocet);
      free(student);
      free(vyber);
      return (0);
    }
    
    (Chtěl jsem napsat ten program slušněji, ale to už bych ho příliš měnil.)
    14.12.2005 08:27 Martin
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Tak zkuste ten svůj původní program spustit pod windows a místo jednoho písmenka jich zadejte najednou třeba dvacet a vsadil bych se že ten program spadne i pod windows, protože si něco přepíšete.

    Nebo zkuste mezi
    int pocet;
    char vyber;

    vložit nějakou proměnou, kterou dále v programu nijak nepoužijete (doufám, že ji kompilátor bez optimalizace nevyhodí, pokud ano, tak ji nějak nesmyslně použijte, aby zůstala v tom programu zachována). A spusťte program pod linuxem a zadejte jedno písmenko a program najednou bude chodit v pořádku.

    14.12.2005 11:59 oxymoron | skóre: 16 | blog: oxymoron | Bratislava
    Rozbalit Rozbalit vše Re: cyklus while a podivne spravanie
    Dakujem vsetkym velmi pekne za odpovede :)
    Born to be root ... :-D | "..žebrák není ten, kto svobodu si získal, z toho se stává král.."

    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.