C-ben hogyan lenne lehetséges karaktereket bekérni a billentyűzetről FÜGGVÉNYEK használata NÉLKÜL?
Az a feladat, hogy C-ben karaktereket olvassak be a billentyűzetről, a "szokásos módon" : valahogy el kell érnem, hogy a program "várakozó" státuszba helyezze magát, hagyja, hogy én a parancssoros ablakon keresztül a bemeneti bufferbe (lényegében az stdin) írjak, majd onnét olvassa vissza az értékeket.
Utóbbit már meg tudom csinálni pointeraritmetikával, hogy utólag visszaolvastassam azokat a bájtokat (pl. egy tömbbe), amiket a billentyűzetről adtam meg lényegében, DE azt nem tudom, hogy hogyan lehet elérni, hogy adott ponton lehessen parancssorosan billentyűzetről karaktereket bevinni a billentyűpufferbe.
Még egyszer jelzem, FONTOS, hogy NEM HASZNÁLHATOK előre beépített FÜGGVÉNYEKET - pl.: getchar(), getc(), getch(), fgetc(), gets(), fgets(), fscanf(), scanf(), stb... ezek közül SEMMIT SEM HASZNÁLHATOK, semmilyen beépített, vagy headerben leírt függvényt, csak kulcsszavakat, változókat, tömböt, stb. függvényt nem, LEGFÖLJEBB inline-assembly kódtagokat.
Valakinek van valami ötlete? - (azon kívül, hogy van aki szerint nem lehet -><- ELVILEG LEHET, csak ÉN nem tudom, hogyan)
A c-ben nem létezik olyan fogalom, hogy standard input vagy standard output. Ezeket CSAK függvények segítségével lehet megcsinálni,amik a c szabcány részei.
Így max tényleg assamblyben tudod megcsinálni ezeket, de a feladat egy butaság semmi értelme, elveszi értelmét a c-ben történő programozás. Modern operációs rendszeren többek között az xp-n legjobb tudomásom szerint( de majd kijavítanak akik jobban értenek hozzá) nincs bios megszakítás, és használatukat is kerülni kell.
Egyébként meg a feladat megoldható assambly nélkül, DE:
a printf függvény forrása c-ben van. Most kb ez így néz ki röviden:
int printf(const char *format, ...)
{
va_list args;
va_start( args, format );
return print( 0, format, args );
}
Itt kifejtve a print függvény:
static int print(char **out, const char *format, va_list args )
{
register int width, pad;
register int pc = 0;
char scr[2];
for (; *format != 0; ++format) {
if (*format == '%') {
++format;
width = pad = 0;
if (*format == '\0') break;
if (*format == '%') goto out;
if (*format == '-') {
++format;
pad = PAD_RIGHT;
}
while (*format == '0') {
++format;
pad |= PAD_ZERO;
}
for ( ; *format >= '0' && *format <= '9'; ++format) {
width *= 10;
width += *format - '0';
}
if( *format == 's' ) {
register char *s = (char *)va_arg( args, int );
pc += prints (out, s?s:"(null)", width, pad);
continue;
}
if( *format == 'd' ) {
pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
continue;
}
if( *format == 'x' ) {
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
continue;
}
if( *format == 'X' ) {
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
continue;
}
if( *format == 'u' ) {
pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
continue;
}
if( *format == 'c' ) {
/* char are converted to int then pushed on the stack */
scr[0] = (char)va_arg( args, int );
scr[1] = '\0';
pc += prints (out, scr, width, pad);
continue;
}
}
else {
out:
printchar (out, *format);
++pc;
}
}
if (out) **out = '\0';
va_end( args );
return pc;
}
Persze ehhez includolni kell egy csomó c szabványban létező függvényt,vagy újra implementálni, vagy ha ennyire nem megy a dolog, akkor meg megkeresni a program által használt nem "szabványos" típusok deklarációját, és végül sikerülne újradefiniálni a printf-et amivel meg tudnád oldani a feladat felét.
Ugyanezt meg kéne csinálni a scanf-el. De értelme ennek sincs. A c nyelv mára 99%-ban ha nem 100%-ban c-ben van megírva.
"A c nyelv mára 99%-ban ha nem 100%-ban c-ben van megírva."
De hisz ez egy ocsmány paradoxon!!! =( HHhhhh.... hogy???
Valamit nem lehet létrehozni saját magával!!
Vagy mégis, és ez egy hiba a Mátrixban?! >( Vagy mi?
És akkor azt most tekintsem álomnak, hogy én C-ben tudok egy olyan parancsot használni, ami kiír egy karaktert a képernyőre?? Ami valamikor csak úgy létrejött magától a nagy éterben?
Egy dolog, hogy hülyeség a feladat, ha tehetném, én is egy hideg éjszaka, amikor a tanár éppen megy haza, és nincs más járókelő az utcán, jól összerugnám... nem csak ezért...
De maga a probléma lehetetlenségét is itt egy paradoxonnak érzem.
"És minden c függvén forrása elérhető az interneten."
Ez így szavanként igaz, csak az értelem abban veszik el, hogy a neten mindig használnak hozzá valami másik függvényt: getc()-hoz fgetc()-t, fgetc()-hez fgets()-t, fgets()-hez ismét getc()-t... és itt zárul az egész egy ...... ..... ördögi körbe. =(
És amúgy ha így-se-úgy-se lehet a képernyőkiírást részegységekre bontani a C-ben, akkor miért nem lehetett rá kulcsszót vagy parancsot definiálni magában a tárgykódot előállító alkalmazáson belül? Miért kellett függvénybe szeparálni azt is, amire meg azt mondjuk, hogy csak úgy van....
...az egész logikája ennek - márha van - átláthatatlan...
"néhány googlizással megtaláltam a printf függvény implementációját"
HOOOOL??? Azt akkor mutasd légyszi! Mert ha abban tényleg nem használnak semmilyen külső függvényt, ÉS lefordul, én megeszem a ...... a sapkámat.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!