[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Limit user input in C

Registrovaný: 14.05.08
Prihlásený: 16.06.23
Príspevky: 99
Témy: 14 | 14
Bydlisko: Prievidzaaa...
NapísalOffline : 10.03.2013 15:31 | Limit user input in C

Ahojte, mám následujúce zadanie:
Kód:
Představení úkolu
Ascii85 (někdy též nazývané Base85) je kódování, které bylo vytvořeno primárně za účelem konverze binárních dat na data textová. Tato konverze umožňuje jejich přenos přes výhradně textové protokoly. Jelikož některé protokoly umožňují používání pouze vybraných tisknutelných znaků, je rozsah výstupních symbolů kódování Ascii85 omezen.

Zadání
Vaším úkolem bude vytvořit program, který ze standardního vstupu načte až 40 znaků (ne nutně tisknutelných) a zakóduje je podle algoritmu Ascii85.

Ascii85 každým 4 bajtům přiřadí bajtů 5. Postup je následující: Vstupní 4 bajty převedeme na jedno číslo N (tak, že ony 4 bajty „poskládáme za sebe“). Z tohoto čísla N nejprve vezmeme zbytek po dělení 85, čímž získáme náš první mezivýpočet, poté se N celočíselně vydělí 85 (tento proces se celkem opakuje pětkrát, čímž získáme 5 čísel). Ke každému takto získanému číslu přičteme 33. Tím jsme získali ASCII kódy výsledných pěti znaků. Kód prvního znaku je přitom poslední takto získané číslo.

Příklad:
Vstup: „Lore“

Vstupní bajt    Dekadické vyjádření    Binární vyjádření
L    76    01001100
o    111    01101111
r    114    01110010
e    101    01100101
N je tedy v binární soustavě vyjádřeno jako 01001100011011110111001001100101, v dekadické je to 1282372197.

Zbytek po dělení 85    Výsledek dělení 85
62    15086731
81    177490
10    2088
48    24
24    0
Výsledkem tedy bude 5 bajtů vyjádřených znaky s ASCII označením 57, 81, 43, 114, 95, což jsou znaky '9', 'Q', '+', 'r', '_' .

Výstup: „9Q+r_“

Požadavky
Napište program, který načte až 40 znaků ze standardního vstupu. Ty posléze zakóduje pomocí Ascii85 a vytiskne je na standardní výstup. Výstup bude zakončen novým řádkem.
Ze vstupu se přestane načítat, jakmile bude splněna alespoň jedna z následujících tří podmínek:
Byl načten 40. znak.
Byl načten znak '\n' (ten nebude zahrnut do znaků k zakódování).
Byl načten znak EOF (ten nebude zahrnut do znaků k zakódování).
Pokud načtený počet znaků nebude dělitelný čtyřmi, doplníme vstup nejmenším počtem znaků '\0' tak, aby v součtu počet dělitelný čtyřmi byl.
Odevzdáváte jediný soubor pojmenovaný ascii85.c
Váš příklad musí jít přeložit a fungovat dle požadavků po zkompilování na aise následujícím způsobem gcc -std=c99 -Wall -Wextra -Werror ascii85.c
Kontrola bude probíhat porovnáváním výstupů, dejte si tedy pozor, ať nevypisujete nic navíc.


Program mám hotový, vo Windowse mi funguje, na Linuxe mi nešiel debugger tak som to ešte neodladil..
Problém je ale v tom, že keď som si to dal skontrolovať, vypísalo mi: "Zaznam testu:
[TEST] Sada nanecisto
[TEST] Test nanecisto 1
[FAIL]Program nedobehl v ocekavane dobe. Program se zacyklil, nebo cekal na dalsi vstup,
nebo byl extremne pomaly."

Tak mi napadlo že asi bude problém v načítaní vstupu. V programe to riešim jednoducho cez fgets() a v tom asi bude problém. Aj keď ručne zadám EOF tak to musím odenterovať. V zadaní je písané, že načítanie skončí akonáhle bude načítaný 40. znak. Vygooglil som však, že to asi nie je také jednoduché, lebo vstup sa najprv načítava do bufferu a až odtiaľ sa posielajú dáta do programu keď shell pošle signál programu že skončil vstup.

Moja otázka je preto či sa nejak (ak hej ako..) dá obmedziť vstup užívateľa, aby skončil po zadaní 40. znaku bez potreby stlačenia enteru. Kontrola prebieha cez skript na školskom serveri takže netuším čo je na vstupe. AK bude treba hodím sem aj celý kód.

Vopred ďakujem za pomoc.
(btw deadline ja zajtra :cry: )


_________________
MB: MSI Z170I GAMING PRO AC CPU: i-5 6600K @3.50GHz GPU: MSI GeForce GTX 970 GAMING 4G RAM: 2x 8GB DDR4 3600 MHz PSU: EVGA 750G2 SSD: SAMSUNG 850 EVO 250GB HDD: 2TB Keyboard: Logitech G915 Mouse: Logitech G502 Audio: Microlab SOLO 9C + Kingston HyperX Cloud Alpha
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.02.08
Prihlásený: 13.10.15
Príspevky: 3
Témy: 1 | 1
NapísalOffline : 12.03.2013 0:17 | Limit user input in C

Ak by som mal poradit, nenacitavaj cez fgets(), hlavne preto ze nemas osetrene nulove znaky v strede retazca. A pokial sem neuverejnis kod, tak myslim ze nikto by nepomohol. Uz je to myslim aj tak jedno, minimalne by v najblizsej dobe mali zverejnit riesenie.


Offline

Užívateľ
Užívateľ
Limit user input in C

Registrovaný: 14.05.08
Prihlásený: 16.06.23
Príspevky: 99
Témy: 14 | 14
Bydlisko: Prievidzaaa...
Napísal autor témyOffline : 12.03.2013 13:19 | Limit user input in C

už som na to prišiel... :) strávil som pekných pár hodín na nete aby som to vyriešil, nakoniec som narazil na funkcie getche() a getch(), ktoré robia presne to, čo som chcel a líšia sa tým že prvá z nich posiela načítané dáta na výstup (echo) a druhá nie. Potom som však zistil že knižnica conio.h, ktorú potrebujú, na linuxe nie je takže následoval celkom pekný kód deklarácie tých 2 fukncií :-D No a najlepšie bolo na tom to, že cvičiaci mi potom ohlásil že to mám robiť jednoducho cez getchar() a nemám sa zaoberať týmito sračkami. Takže som strávil niekoľko dní nad tým celkom na nič.. čo už taký je život :) btw nakoniec som to mal celé dobre aj s bonusom... ak by niekoho zaujímalo môžem sem hodiť kód


_________________
MB: MSI Z170I GAMING PRO AC CPU: i-5 6600K @3.50GHz GPU: MSI GeForce GTX 970 GAMING 4G RAM: 2x 8GB DDR4 3600 MHz PSU: EVGA 750G2 SSD: SAMSUNG 850 EVO 250GB HDD: 2TB Keyboard: Logitech G915 Mouse: Logitech G502 Audio: Microlab SOLO 9C + Kingston HyperX Cloud Alpha
 [ Príspevkov: 3 ] 


Limit user input in C



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

limited user

v Operačné systémy Microsoft

4

394

08.05.2007 11:01

tairikuokami

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

User Class

v Redakčné systémy

2

480

12.03.2007 14:51

koudy

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

prihlaseny user

v PHP, ASP

24

1257

21.07.2009 19:58

shaggy

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

User status

v Redakčné systémy

4

610

04.03.2007 17:20

Sony

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

net user *

v Ostatné

0

773

08.09.2008 20:34

euthanan

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

User Class

v Redakčné systémy

3

511

06.07.2007 7:02

masterdead

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

PayPal limit

v Obchody, reklamácie a právo

5

2027

25.05.2011 17:41

vama

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

Net limit

v Sieťové a internetové programy

0

368

16.11.2015 15:00

MrDeev

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

INTERNET LIMIT

v Sieťové a internetové programy

1

264

02.09.2015 1:36

Bubo2306

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

limit 260

v Grafické karty

23

655

03.12.2014 16:51

liqua1

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

wamp - mysql user

v Ostatné

2

553

31.05.2009 8:05

stenley

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

User Class - help

v Redakčné systémy

8

451

08.01.2007 19:09

Leachim

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

Odosielateľ Root User

v Ostatné

0

286

12.10.2011 17:11

ONLINE_SVET

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

Multi User - Wordpress

v Redakčné systémy

0

489

21.03.2007 20:15

pepek92

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

web - user scalable

v HTML, XHTML, XML, CSS

3

376

11.10.2016 12:10

neopagan

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

Multilingual User Interface...

v Assembler, C, C++, Pascal, Java

6

474

30.06.2009 12:38

László145



© 2005 - 2024 PCforum, edited by JanoF