| | |
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Autor | Správa |
---|
Registrovaný: 04.08.08 Prihlásený: 28.10.11 Príspevky: 152 Témy: 42 |
zdravim..preco ak zadam nejaky znak rozny od enteru(\n) tak sa program nevypne ?
Kód: #include <stdio.h>
int main() { int c;
while ((c = getchar()) = '\n') { printf("%c",c); }
return 0; }
|
|
Registrovaný: 30.05.06 Prihlásený: 28.06.15 Príspevky: 2278 Témy: 45 Bydlisko: ZA |
Kód: while ((c = getchar()) = '\n') {
=> Kód: while ((c = getchar()) == '\n') {
bez toho by ti to ani skompilovat nemalo...(kazdopadne po uprave mi to funguje)
|
|
Registrovaný: 04.08.08 Prihlásený: 28.10.11 Príspevky: 152 Témy: 42 | Napísal autor témy beginner: 06.01.2009 13:25 | |
|
aha..sakra,ja som si nevsimol ze tam nemam == a rozmyslal som nad tym ze kde je chyba..mozes mi vysvetlit preco nasledujuci prikaz pracuje tak ze odstrani vsetky znaky za nacitanym znakom ? Neviem si to nejak prelozit ako to pracuje, ak nacitany znak sa nerovna \n tak co ?
Kód: while (getchar() != '\n') ;
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
tak v tomto pripade nic, kedze je tam iba ";". Ked za while nadas zlozene zatvorky, tak sa vykonava iba prikaz, ktory nasleduje bezprostredne za while. A tym je v tomto pripade ;, co je nic nerobiaci prikaz, ked si tam mal printf, tak ho vypisalo.
|
|
Registrovaný: 04.08.08 Prihlásený: 28.10.11 Príspevky: 152 Témy: 42 | Napísal autor témy beginner: 06.01.2009 15:23 | |
|
ale ako vlastne funguje to nacitavanie znakov ?
Ak zadam do vstupu nejake znaky a ukoncim vstup enterom, tak buffer sa vyprazdni a do premennej sa postupne nacitavaju znaky z bufferu v tomto pripade ?
Kód: while ((c = getchar()) != '*') { printf("%c",c); }
a ak mam kod doplneny o tento prikaz while (getchar() != '\n')..tak preco mi berie do uvahy len 1znak ? Preco neberie vsetky znaky,ved znak \n je az na konci ked ukoncujem vstup. Lebo v 1.pripade ak zadam do vstupu znaky abcd,tak mi ich aj vypise a tu ak zadam tie iste znaky tak vypise len a. Kód: while ((c = getchar()) != '*') { while (getchar() != '\n') ; printf("%c",c); }
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
lebo v tom druhom pripade tie znaky sice nacitas, ale nikam ich nepriradujes, cize hodnota premennej c zostava ta ista ako na zaciatku, co je prve pismeno zadaneho retazca
a pomocou
while (getchar() != '\n')
;
buffer vyprazdnis, cize uz getchar v prvom while nema co nacitat, tak sa uz nic viac nevypise.
Naposledy upravil stopa27 dňa 06.01.2009 15:41, celkovo upravené 1
|
|
Registrovaný: 04.08.08 Prihlásený: 28.10.11 Príspevky: 152 Témy: 42 | Napísal autor témy beginner: 06.01.2009 15:41 | |
|
preco ich nikam nepriradujem ? Ved tiez by mali byt najprv v bufferri a potom postupne po znaku do premennej nie ? Nechapem to...
|
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 |
Mozes si to predstavit napriklad takto
Kód: while ((c = getchar()) != '*') { while ((d=getchar()) != '\n') ; printf("%c",c); }
Prvy znak sa ulozi do premennej c, a ostatne sa postupne ukladaju do premennej d, teda tato premenna sa stale prepisuje, az dokym v bufferi nie je znak '\n'. Ked tam to d nie je, tak sa ten nacitany znak proste nepriradi nikde...
P0M4R4NC - skompilovat by to malo ist, kedze while ((c = getchar()) = '\n') je normalny vyraz, ktory je pravdivy, takze pri spusteni programu by sa vzdy vyhodnotila kladna vetva podmienky.
_________________ Empty your memory, with a free()… like a pointer! If you cast a pointer to an integer, it becomes the integer, if you cast a pointer to a struct, it becomes the struct… The pointer can crash…, and can overflow… Be a pointer my friend… |
|
Registrovaný: 04.08.08 Prihlásený: 28.10.11 Príspevky: 152 Témy: 42 | Napísal autor témy beginner: 06.01.2009 19:31 | |
|
neutronmind: tak to je uz lepsie chapatelne
|
|
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|