Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 9 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.08.08
Prihlásený: 28.10.11
Príspevky: 152
Témy: 42
Príspevok NapísalOffline : 06.01.2009 13:10

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;
}


Offline

Užívateľ
Užívateľ
preco

Registrovaný: 30.05.06
Prihlásený: 28.06.15
Príspevky: 2278
Témy: 45
Bydlisko: ZA
Príspevok NapísalOffline : 06.01.2009 13:18

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)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.08.08
Prihlásený: 28.10.11
Príspevky: 152
Témy: 42
Príspevok Napísal autor témyOffline : 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')
  ;


Offline

Užívateľ
Užívateľ
preco

Registrovaný: 19.09.06
Prihlásený: 21.04.24
Príspevky: 749
Témy: 31
Bydlisko: Ružomberok&...
Príspevok NapísalOffline : 06.01.2009 14:27

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.08.08
Prihlásený: 28.10.11
Príspevky: 152
Témy: 42
Príspevok Napísal autor témyOffline : 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);
}



Offline

Užívateľ
Užívateľ
preco

Registrovaný: 19.09.06
Prihlásený: 21.04.24
Príspevky: 749
Témy: 31
Bydlisko: Ružomberok&...
Príspevok NapísalOffline : 06.01.2009 15:33

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

Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.08.08
Prihlásený: 28.10.11
Príspevky: 152
Témy: 42
Príspevok Napísal autor témyOffline : 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...


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.04.08
Prihlásený: 15.05.15
Príspevky: 884
Témy: 3
Príspevok NapísalOffline : 06.01.2009 19:18

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…
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.08.08
Prihlásený: 28.10.11
Príspevky: 152
Témy: 42
Príspevok Napísal autor témyOffline : 06.01.2009 19:31

neutronmind: tak to je uz lepsie chapatelne :)


Odpovedať na tému [ Príspevkov: 9 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. MSI FX 603 prečo áno, prečo nie?

v Notebooky a netbooky

5

1180

02.08.2011 22:15

KekkeiGenkai Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prečo

v Správy pre vedenie fóra

5

1434

11.04.2009 14:06

Luks Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Preco?

v Počítačové hry

25

1518

30.06.2007 19:19

tomasko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. preco sakra?

v Správy pre vedenie fóra

17

2348

20.12.2007 19:25

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PRECO NEJDE?

v nVidia grafické karty

12

927

22.04.2008 20:41

prandof Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. empty preco??:(

v PHP, ASP

6

519

20.05.2008 16:31

Blackshadow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vybijanie baterky...preco???

v Notebooky a netbooky

6

607

07.12.2008 14:20

darkhill Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prečo to nejde?

v Pevné disky a radiče

8

532

11.04.2010 23:06

Durinko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozmazaný obraz, prečo?

v ATI/AMD grafické karty

0

439

25.04.2011 17:06

skanzen Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pomóc mrznem, prečo???

v nVidia grafické karty

7

530

17.08.2007 11:54

mysik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prečo len 256Mb?

v nVidia grafické karty

3

482

03.02.2010 20:30

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. preco nefachci dualchannel?

v Pamäte

4

582

10.01.2008 13:11

borec Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Preco tak lacneju?

v Pamäte

5

796

07.11.2007 23:06

fuco Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Preco toto nefunguje?

v PHP, ASP

3

722

13.08.2011 16:22

juho Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. prečo nie 85Hz?

v Monitory, televízory a projektory

11

1491

04.05.2008 12:53

Seth Sparrow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prečo používate Adblock

[ Choď na stránku:Choď na stránku: 1, 2, 3 ]

v Krčma

80

3974

02.03.2015 13:08

fakt7 Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra