Kezdőoldal » Számítástechnika » Programozás » C-ben hogyan lenne lehetséges...

C-ben hogyan lenne lehetséges karaktereket bekérni a billentyűzetről FÜGGVÉNYEK használata NÉLKÜL?

Figyelt kérdés

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)



2014. nov. 26. 13:43
1 2 3 4
 21/32 anonim ***** válasza:
Az INT 16H egy x86 assembly utasítás, miért lenne C-ben, és ha lenne, mit csinálna pl egy arduinon?
2014. nov. 27. 22:05
Hasznos számodra ez a válasz?
 22/32 anonim ***** válasza:

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.

2014. nov. 29. 17:25
Hasznos számodra ez a válasz?
 23/32 anonim ***** válasza:

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.

2014. nov. 29. 17:34
Hasznos számodra ez a válasz?
 24/32 A kérdező kommentje:

"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?

2014. nov. 29. 17:52
 25/32 anonim ***** válasza:
Miért ne lehetne? Ez nem paradoxon, ez a valóság. Miért lehetne egy újabb c fordítót írni annak egy régebbi változatával. És minden c függvén forrása elérhető az interneten.
2014. nov. 29. 17:55
Hasznos számodra ez a válasz?
 26/32 A kérdező kommentje:

É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.

2014. nov. 29. 17:57
 27/32 anonim ***** válasza:
Az első c fordítót assamblyben írták ez tény. Később többek között a unixok és a linuxok megjelenésének köszönhetően egyre nagyobb százalékát írták meg c-ben. Végül már alig tudok olyan standard függvénykönyvtáratt mondani ami tényleg csak inline assamblyben oldható meg. Ez nem paradoxon, miért gondolod, hogy önmagával írják meg. Adott egy pl. gcc 3.4.2, ezen a fordítón ír valaki egy pl. 3.8.2-t lefordítja és működik. Ezt senki sem állította, hogy önmagával írták meg. A C egy turing teljes programnyelv, ami azt jelenti röviden, hogy minden probléma algoritmizálható benne, most ne menjünk bele, hogy azt jelenti szó szerint, hogy emulálható benne egy turing gép is, tehát c-ben simán lehet írni egy c fordítót is. A másik pedig néhány googlizással megtaláltam a printf függvény implementációját és távolról sem találtam benne assambly nyelv utasítást-> ergó a feladatod megoldható, csak sok szopás, és értelmetlen programozás árán.
2014. nov. 29. 18:05
Hasznos számodra ez a válasz?
 28/32 A kérdező kommentje:

"É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...

2014. nov. 29. 18:05
 29/32 A kérdező kommentje:

"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.

2014. nov. 29. 18:09
 30/32 anonim ***** válasza:
Nem átláthatatlan, csak te nem látod át. Azokat a függvényeket amiket a függvényeken belül használnak használják más helyeken is, most komolyan ennyire nem érted a programozást, tegyük fel egy nagyobb programodba ötször használsz egy azonos utasítás blokkot, akkor te azt ötször begépeled? Egyszerűbb egyszer begépelni és utána meghívod...
2014. nov. 29. 18:10
Hasznos számodra ez a válasz?
1 2 3 4

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!