[ 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 | 42
NapísalOffline : 06.01.2009 13:10 | preco

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: 2293
Témy: 45 | 45
Bydlisko: ZA
NapísalOffline : 06.01.2009 13:18 | preco

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 | 42
Napísal autor témyOffline : 06.01.2009 13:25 | preco

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ý: 18.12.17
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 06.01.2009 14:27 | preco

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 | 42
Napísal autor témyOffline : 06.01.2009 15:23 | preco

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ý: 18.12.17
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 06.01.2009 15:33 | preco

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 | 42
Napísal autor témyOffline : 06.01.2009 15:41 | preco

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 | 3
NapísalOffline : 06.01.2009 19:18 | preco

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 | 42
Napísal autor témyOffline : 06.01.2009 19:31 | preco

neutronmind: tak to je uz lepsie chapatelne :)


 [ Príspevkov: 9 ] 


preco



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

513

02.08.2011 22:15

KekkeiGenkai

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

Prečo

v Správy pre vedenie fóra

5

1202

11.04.2009 14:06

Luks

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

Preco?

v Počítačové hry

25

1349

30.06.2007 19:19

tomasko

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

preco sakra?

v Správy pre vedenie fóra

17

2149

20.12.2007 19:25

JanoF

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

PRECO NEJDE?

v nVidia grafické karty

12

648

22.04.2008 20:41

prandof

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

empty preco??:(

v PHP, ASP

6

371

20.05.2008 16:31

Blackshadow

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

vybijanie baterky...preco???

v Notebooky a netbooky

6

354

07.12.2008 14:20

darkhill

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

Prečo to nejde?

v Pevné disky a radiče

8

337

11.04.2010 23:06

Durinko

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

Rozmazaný obraz, prečo?

v ATI/AMD grafické karty

0

289

25.04.2011 17:06

skanzen

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

Prečo len 256Mb?

v nVidia grafické karty

3

305

03.02.2010 20:30

ac.milan

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

pomóc mrznem, prečo???

v nVidia grafické karty

7

386

17.08.2007 11:54

mysik

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

preco nefachci dualchannel?

v Pamäte

4

382

10.01.2008 13:11

borec

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

Preco tak lacneju?

v Pamäte

5

625

07.11.2007 23:06

fuco

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

Preco toto nefunguje?

v PHP, ASP

3

549

13.08.2011 16:22

juho

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

Ktorý a prečo?

v Notebooky a netbooky

16

457

26.07.2011 21:31

scot

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

prečo nie 85Hz?

v Monitory, televízory a projektory

11

1288

04.05.2008 12:53

Seth Sparrow



© 2005 - 2018 PCforum, edited by JanoF