Tak vyřešeno, stačí přidat mezeru do scanf(" %c").
Příspěvky odeslané z IP adresy 88.100.30.–
S 2. máte pravdu, promyslím to tedy jinak. Co se týče:
1) Jak to můžu eliminovat? Napadá mě jedině použít int a vyžadovat zadání 1,2,3. Existuje nějaká možnost jak používat znaky a enter vynechat?
3) Můžu tedy použít jen char odpoved?
Dobrý den,
mám jednoduchý program pro hádání čísel. Uživatel si myslí číslo a počítač hádá.
double minimum = 0, maximum = 100;
double interval = maximum - minimum;
double polovina= interval/2;
char odpoved[1];
printf("Myslete si cislo od 0 do 100.\n");
printf("Odpovidejte:\n");
printf("m - mensi, v - vetsi, s - spravne\n\n");
//nekonečná smyčka (dokud 1 nebude 0 -> nikdy)
while(1)
{
printf("Je Vase cislo %.0f?\n",pul);
scanf("%c",&odpoved);
if(odpoved == 'm')
{
maximum = polovina;
interval = maximum - minimum;
polovina= interval/2;
}
else if(odpoved == 'v')
{
minimum = polovina;
interval = maximum - minimum;
polovina= interval/2;
}
else if(odpoved == 's')
{
printf("Ohodl jsem!\n");
return;
}
else
{
}
}
Problém je v použití char, pokud bych použil int, problém je odstraněn, cyklus proběhne až po zadání znaku. Řekl bych že bere zadání i jako enter - mám pravdu? Pokud ano, jak to odflitruji? A druhý problém zřejmě souvisí, program reaguje zpožděně. Pokud zadám že je číslo menší než 50, vypíše že si myslí že číslo je 25. Teď dám větší, ale vypíše 13. Čili zadání se projeví až v dalším cyklu, jak je to možné?
Díky za pomoc
A ještě poslední dotaz. Je nějak možné přetypovat "zbytek onoho řetězce"? Např. mám:
char cisla[30] = "1230954";
S prvními 3 znaky pracuji, ale od 4 bych ho chtěl vypsat a použít, do proměnné bych tedy chtěl dostat řetězec "0954" a ten uložit jako int. Tedy nějakou fci která mi rozdělí řetězec od cisla[3] do konce. A potom předpokládám použiji funkci atoi().
Díky, opravdu funguje. V C datový typ string ale neexistuje, ne? Nebo se jako string počítá třeba char pomocna[10], tedy pole o 10 znacích = string?
pomocna = cislo[x];
atoi(pomocna);
Mohl byste mi prosím vysvětlit i Váš zápis? Od mého jednoho znaku odečítám jeden znak, který je 0, proč to? Jaktože se tak z jednoho znaku odečtením '0' stane číslo, které můžu zapsat do int?
PS: S Cčkem víceméně začínám, programuji v PHP a dělají mi problémy zejména tyto věci co se týče syntaxe, přetypování, trochu ještě i pointery. Doporučil byste mi nějakou vhodnou literaturu? Nerad bych s každou takovou blbostí jako dnes otravoval zde na fóru..
Dobrý den,
vytvářím převodník arabských čísel na římská a v jednom kroku (přičítání M pro tisíce, desetitisíce atd.) bych potřeboval přetypovat proměnnou ze znaků, řetězce na int, kvůli for cyklu. Celé to procházím cyklem, takže potřebuji převést cislo[x] na int a uložit do druhé proměnné, zkoušel jsem to různě, např. takto, ale bohužel, vypisuje to nesmyslné hodnoty...
cislo[15] = "15161212"
pomocna = atoi(cislo[x]);
Díky za rady
Dobré odpoledne,
už si vážně nevím rady kde dělám chybu. Snažím se udělat převodník z římských čísel na arabská a opačně. Kupodivu jsem se opět zasekl u syntaxe, jako vždy. Cyklem procházím pole a pokud se ta daná hodnota rovná příslušnému římskému číslu, přičítám její hodnotu v arabských číslicích. Nicméně vyhodnocení podmínky je vždy jako nesplněná. Jak je to možné? Když si to v else vypíšu, vypíše to přesně to co je v podmínce...
#include <stdio.h>
#include <stdlib.h>
char rim_cislo[8] = "XXX", neco;
char *uk = &rim_cislo;
int des_cislo, x;
des_cislo = 0;
int main(void)
{
for(x=0; x<=7; ++x){
if(rim_cislo[x] == "\0"){
break;
}
if(rim_cislo[x] == "X"){
des_cislo = des_cislo+10;
} else {
printf("%c \n", rim_cislo[x]);
}
if(rim_cislo[x] == "V"){
des_cislo = des_cislo+5;
printf("aaaa %d", des_cislo);
}
if(rim_cislo[x] == "I"){
des_cislo = des_cislo+1;
}
}
printf("%d", des_cislo);
}
Ano, jde o jednorozměrnou matici s X x Y prvků. Čili 2x5, 8x8 atd. Čili pokud to správně chápu tak nějak takto?
srand(time(NULL))
printf("Zadejte prvni rozmer matice:\n");
scanf("%d",&prvni);
printf("\nZadejte druhy rozmer matice:\n");
scanf("%d",&druhy);
rozmer = prvni*druhy;
int *ptr = malloc(sizeof(int)*rozmer);
int * ptr = matice;
for(c=1; c<=rozmer;c++){
matice[c] = rand();
}
int free(ptr);
S tím že srand zajistí to že fce rand() bude mít pokaždé jiné hodnoty. Potom čtu vstupy, vytvořím rozměr matice, např. 2x3 = 6. Alokuji paměť pro 6*int (čili 24B). Jak teď zajistím to aby v té vyhrazené paměti bylo to moje pole s maticí? Zápisem *ptr =matice[rozmer]? V tomto případě *ptr=matice[6]. Tím mám matici v paměti kterou jsem si alokoval. Teď cyklem zapíšu náhodné hodnoty (12ks) od 0 do 99. Je to tak, nebo se funkce rand() používá jinak? Je celý kód v pořádku?
Díky moc
Teď si říkám že je to nesmysl, protože tam nikde nemám dáno že to pole bude v té vyhrazené paměti.
Takže tam bude ještě něco namísto klasického
int matice[rozmer] tam bude int matice* ptr?
Aha, takže pokud to správně chápu, int zabírá 4B, čili pokud napíši malloc(sizeof(int)*5), vyhradím si paměť pro 5 čísel typu int.
Mám za úkol kde uživatel bude zadávat rozměry matice a podle toho se bude alokovat/uvolňovat paměť. Matici máme doplnit náhodnými čísly a uložit do jednorozměrného pole.
Načtu tedy od uživatele rozměr matice, třeba 4x3. Potřebuji tedy 12 prvků pole pro uložení všech čísel. Celé to bude v nekonečném cyklu, pro jednoduchost to tady udělejme bez něj. Bude to vypadat nějak takto?
printf("Zadejte prvni rozmer matice:\n");
scanf("%d",&prvni);
printf("\nZadejte druhy rozmer matice:\n");
scanf("%d",&druhy);
rozmer = prvni*druhy;
int * ptr = malloc(sizeof(int)*rozmer);
for(c=1; c<=rozmer;c++){
matice[c] = c;
}
int free(*ptr);
Pokud zadám 4 a 3 tak obsah pole[] bude "1,2,3,4,5,6,7,8,9,11,12"). Pokud bych chtěl čísla generovat náhodně, jak to udělat? Existuje nějaká funkce random?
To jsem původne chtěl, ale nevím zda toho nebude na veřejné fórum příliš :d , máme asi 10 úkolů a zaseknul jsem se na 3. kde máme udělat alokaci paměti podle toho kolika rozměrnou matici si uživatel vyžádá. Pokud si vyžádá menší, tak paměť uvolnit. Potřebuji tak trochu nakopnout správným směrem abych to dokázal pochopit.
Já chápu princip malloc(), že mi vyhradí místo v paměti a vrátí ukazatel na začátek. Vyhradí mi tedy třeba místo od 69000 do 70000. A vrátí ukazatel na 69001. Pokud bych použil calloc() tak je to to samé, jen v paměti všude přepíše hodnoty na 0.
Ale problém je s tím použitím, našel jsem použití:
void *malloc(size_t size);
Čemuž už nerozumím. Void se používá jako parametr funkce pokud žádný nechci main(void), ale tady je jako proměnná ve které mám ten ukazatel? Size_t (vím že musí být inicializována speciální knihovna) je vlastní datový typ, hodně velký, místo toho size napíšu počet bitů které chci vyhradit? Čili třeba void *malloc(size_t 256) mi vyhradí 256 míst v paměti? A ukazatel tedy vrátí hodnotu třeba 8000 a paměť bude vyhrazena do 8256?
Dobrý den,
našel by se někdo kdo by mi za nějakou rozumnou hodinovku po skypu pomohl pochopit základy Cčka? Mám nějaké úkoly se kterými bych potřeboval pomoci.
Pokud ano, můj email: olomoucak1@email.cz , pokud připojíte i svůj skype, vše tím urychlíme.
Díky moc kluci, v Cčku se začínám učit tak doufám že neavdí že se tu objeví víc takových triviálních dotazů...
Dobrý den,
chtěl bych se zeptat na začátečnickou otázku, nikde se mi nedaří najít odpověď. Jak je možné ošetřit vstup pouze na čísla? Jde mi o to, aby při chybě (zadání znaku) program znovu vyzval k zadání čísla. Zkoušel jsem různé cykly, např.:
while((scanf("%g", &a) != 1)){
printf("Znovu, musite zadavat pouze cisla!");
}
při zadání čísla je to v pohodě, ale při zadání textu se to zacyklí, musím tu proměnnou zase nějak vymazat, nebo jak to upravit?
Díky
Pawlik
Kvůli tomu abych uměl dobře kódovat musím mít vlastní doménu? Jednu mám, ale ta se k tvorbě webů příliš nehodí takže jsem využil email u seznamu, který mi prozadím vyhovuje. Reference na emailu pokud máte zájem.
Když vám vadí neregistrovaní uživatelé, zaregistroval jsem se (toto fórum neznám, takže jsem se předtím neregistroval).
Nabízím tvorbu kvalitních webových stránek se základní SEO optimalizací. Žádný ceník nemám, weby tvořím individuálně, na ceně se nějak dohodneme.
Pokud máte zájem, kontaktujte mně na kvalitni-weby@seznam.cz.
Chtěl poradit jak vytvořit odpočet času.Napište prsím přesný kód i s názvem souboru.Např.
<body...........>
........................
........................
uložit do souboru pocitadlo
.....................
....................
ulozit do index