C programozás. Miért nem jeleníti meg a while ciklus utáni printf () tartalmát? A többi lent.
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); }
Szia mivel fordítottad?
Én codeblocks-szal és gcc-vel, és ment.
A karakterek után <ctrl-z><enter> -t nyomtam.
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
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?
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?
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;
}
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
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 !
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!