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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 0
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 4
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 791 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 88×
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.."
Martin Tůma avatar 13.12.2005 21:10 Martin Tůma | skóre: 38 | 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.