Kezdőoldal » Számítástechnika » Programozás » C programozás. Miért nem...

C programozás. Miért nem jeleníti meg a while ciklus utáni printf () tartalmát? A többi lent.

Figyelt kérdés

Csináltam egy karakterszámlálót de nem értem hogy "végülis a lényeget" miért nem jeleníti meg.

Az első printf oké, de utána csak a bevitt karaktereket látom, de a számlálót és az értékeit nem. Még akkor sem ha CTRL+z -t nyomok. Mi lehet a baj?


#include <stdio.h>

void main(void) {

short k, num, feher, egyeb;

num=feher=egyeb=0;

printf("Bemeneti karakterek leszámlálása\n"

"kategóriánként EOF-ig, vagy CTRL+Z-ig.\n");

while( (k=getchar()) !=EOF)

if(k>='0'&&k<='9')++num;

else if(k==' '||k=='\n'||k=='\t')++feher;

else ++egyeb;

printf("Karakter számok:\n"

"----------------\n"

"numerikus: %5hd\n"

"fehér: %5hd\n"

"egyeb: %5hd\n"

"---------------\n"

"össz:%10ld\n", num, feher, egyeb, (long)num+feher+egyeb); }


2010. máj. 28. 19:05
 1/8 anonim ***** válasza:

Szia mivel fordítottad?

Én codeblocks-szal és gcc-vel, és ment.

A karakterek után <ctrl-z><enter> -t nyomtam.

2010. máj. 28. 19:13
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Ja bocs csak akkor megy ha <enter><ctrl-z><enter> -t nyomsz....

Ilyen a windows...

Linuxon asszem elég egy <ctrl-d>, de most ez mind1

2010. máj. 28. 19:15
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

nem teljesen értem, ez sima C akarna lenni?


mióta lehet a printf-be beírni több stringet?

az EOF -ról nekem ugrik be az, hogy EndOfFile?

2010. máj. 28. 19:30
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:

Helló!

C-free -vel és MinGW -vel fordítottam. Igazad volt "enter"/"ctr+z"/"enter" a helyes "windows" alól. Köszi :)

A linuxot még csak most akarom felrakni gépemre.


Igen sima C. Szerintem bármennyi stringet írhatsz a printf() -be. EOF = End Of File.

Köszi a válaszokat.

Azt esetleg nem tudjátok hogy az ékezetes karaktereket miért nem jeleníti meg?

2010. máj. 28. 20:09
 5/8 anonim ***** válasza:

3.nak írom h ha egymás után írod közvetlenül a stringeket ("lol" "xd" = "lolxd") azok egy stringként kerülnek lefordításra ez azért van h lehessen több sorba irni meg ilyesmi... .

Az EOF tényleg end of file de természetesen a konzolt is fájlként kezeled, ott a fájl végét jelzi az ctrl-z-zés...

Am az eof az egy 255 feletti egész szám pontosan nem tom mi de a lényeg h jelzi h ez nem egy karakter hanem a vége az egész cuccnak....


Am jobb esetben ezt a kódot vhogy így írnád szabványosabb meg nekem jobban tetszik meg áttekinthetőbb :D

A lényeg h már vagy 20 éve van egy c szabvány miszerint a main az egy int függvény és ha jól ment mindent 0 az eredménye egyébként meg tetszés szerinti hibakód..


ilyen összetett if-eknél meg ilyesminél ki szoktuk rakni a {} zárójeleket, hidd el hosszú kód esetén könnyű elrontani ha nem írod ki.. :)


shortot végülis naggyából felesleges használni meg longot hiszen csak a bonyolultságot növelik és a sort nem is gyorsabb..

max nagy tömböknél jó, mert akkor hely takarékosság..

am úgy van h

char 8

short 16

int 32

long 32

long long 64

bit a legtöbb környezetben, de ezt lehet h tudod mindegy, a lényeg h a sima int a legegyszerűbb általános célra..

Am kezdetnek tök jó a te kódod is meg nem is vt hibás csak gondoltam beírom hátha valakinek jó lesz.. .:D


#include <stdio.h>


int main()

{

int k, num, feher, egyeb;

num=feher=egyeb=0;

puts("Bemeneti karakterek leszámlálása\n"

"kategóriánként EOF-ig, vagy CTRL+Z-ig.\n");

while ( (k=getchar()) !=EOF)

{

if (k>='0'&&k<='9')

{

++num;

}

else if (k==' '||k=='\n'||k=='\t')

{

++feher;

}

else

{

++egyeb;

}

}

printf("Karakter számok:\n"

"----------\n"

"numerikus:%5d\n"

"fehér: %5d\n"

"egyéb: %5d\n"

"----------\n"

"összesen: %5d\n", num, feher, egyeb, num+feher+egyeb);

return 0;

}

2010. máj. 28. 21:00
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

jah hát a windows a dosos karakterkódolást használja te meg a fájlba valszeg vagy windows 1250 vagy unicode kódolásba írod..

Elég necces de meg lehet oldani..

Pl: windows 1250-esnél:



#include <stdio.h>

#include <windows.h>


int main()

{

SetConsoleOutputCP(1250);


Na ez az ami kell de lehet hogy még a parancssor betűtípusát is át kell állítani a raszteresről lucidára.. :)

UTF-16-nál meg asszem 1200 at kell beirni

2010. máj. 28. 21:16
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:

Köszi, sokat segítettél. Így ahogy leírtad tényleg áttekinthetőbb. Még csak most kezdtem el tanulni a C-t. Megpróbálom át állítani a karakterkódolást, köszi a segítséget! Itt szoktál lenni a fórumon sűrűn? Mert biztos lesz még 1-2 kérdésem mert sajna egyedül tanulok itthon, és nem nagyon tudok senkitől segítséget kérni.

Köszi még egyszer !

2010. máj. 28. 22:30
 8/8 anonim ***** válasza:

Na, több string printf-be. A printf akárhány paramétert átvesz, int printf(const char* format, ...); alakú. Az persze más kérdés, mit kezd a paraméterekkel, %s-el lehet stringet belefűzni a format stringben, tehát például

printf("a(z) %s %s\n", "alma", "zöld");

azt fogja kiírni, hogy

a(z) alma zöld

(ha a kimenet tud ékezetes karaktert, de a kód mindenképpen ki fog menni)


De itt vessző nélkül vannak, tehát egybefűzi őket, ahogy fentebb említette valaki.

2010. máj. 29. 18:54
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!