Conio.h – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Conio.h – C / C++ – Fórum – Programujte.comConio.h – C / C++ – Fórum – Programujte.com

 

luk0110
Duch
13. 9. 2012   #1
-
0
-

Ahoj všem, potřeboval bych pomoci s příkladem na C (C++ né). Potřeboval bych pomocí knihovny Conio.h vytvořit program, který ihned po napsaní znaku a udělá d tj. o 3 místa v ascii tabulce.

Mělo by se to zobrazit ihned po stisku klávesy, takže né až po enteru nebo tak.

Ze slova ahoj by mělo při psaní vzniknout slovo dkrm

Mělo by to být hodně jednoduché, program asi o 5 řádcích.

Díky moc za pomoc!

Nahlásit jako SPAM
IP: 46.39.176.–
vitamin+8
Grafoman
13. 9. 2012   #2
-
0
-

Skús :

putc(getche() + 3);
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
luk0110
Duch
13. 9. 2012   #3
-
0
-

#2 vitamin
Nechápu jak to zakomponovat, s C nemám moc zkušeností. Není to prý nic dlouhého, takže kolem těch 5 řádků, nepostnul by sem někdo funkční kód? Za minutu to máte spíchnutý. Je to taková jednorázová akce.

Nahlásit jako SPAM
IP: 46.39.176.–
vitamin+8
Grafoman
13. 9. 2012   #4
-
0
-

 Nemám conio.h, takže si to musíš otestovať sám.

int c;
while( (c=getche()) != '\n' )putc(c+3);
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
luk0110
Duch
13. 9. 2012   #5
-
0
-

   

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main(){
int c;
while( (c=getche()) != '\n' )putc(c+3);
system("pause");
}

Bohužel nefunguje, dělám to v Dev C++.  

Nahlásit jako SPAM
IP: 46.39.176.–
ingiraxo+15
Grafoman
13. 9. 2012   #6
-
0
-

#5 luk011
takto

int c;
while((c = getch()) != '\n')
    putc(c + 3, stdout);
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
luk0110
Duch
13. 9. 2012   #7
-
0
-

A bez toho streamu by to nešlo? Musí to být něco jednoduchého, bez nějakých složitějších funkcí. Klidně delší, ale hlavně jednoduché funkce.

Nahlásit jako SPAM
IP: 46.39.176.–
ingiraxo+15
Grafoman
13. 9. 2012   #8
-
0
-

tak když se ti nelíbí putc, tak použij klasickej printf 

printf("%c", c + 3);
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #9
-
0
-

#5 luk011
Máš tam chybičku.. místo putc máš mít putch.

Nahlásit jako SPAM
IP: 213.129.139.–
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #10
-
0
-

#9 Gody
Omlouvám se. Zapomněl jsem dodat ještě c=getch() né getche..

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main(){
   
    int c;
   
    while( (c=getch()) != '\n' ) putch(c+3);
   
    system("Pause");
}

Nahlásit jako SPAM
IP: 213.129.139.–
luk0110
Duch
13. 9. 2012   #11
-
0
-

Už to funguje, ale mám otázku, proč je v kódu != '\n'

Bez toho to dělá úplně to stejné.

Nahlásit jako SPAM
IP: 46.39.176.–
ingiraxo+15
Grafoman
13. 9. 2012   #12
-
0
-

#11 luk011
správně by to mělo být takto nějak  

int main()
{
	const int posun = 3;
	int c;

	while((c = getch()) != ((int)'\n') + posun)
		putch(c + posun); // muzes pouzit i printf() je to jedno.. ale tohle je kratsi

	return 0;
}

ona tam byle chyba, tedka uz podminka funguje spravne... kdyz das enter, tak ukoncis program, proto je tam != '\n'

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #13
-
0
-

#11 luk011
Nevím, proč to tam zkušenější kolegové dali. Ale každopádně navrhuji změň si "\n" na číslo 13 (tj. vlastně decimální vyjádření klávesy enter). To ti pak způsobí, že se cyklus while ukončí po stisku Enteru, jinak by program byl v nekonečný smyčce.

Nahlásit jako SPAM
IP: 213.129.139.–
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #14
-
0
-

#12 ingiraxo

Nj.. na to jsem vlastně zapomněl.. jde vidět, že jsem se tomu už pár let nevěnoval co jsem ze školy pryč  .. a ono to stačilo přetypovat.

Nahlásit jako SPAM
IP: 213.129.139.–
ingiraxo+15
Grafoman
13. 9. 2012   #15
-
0
-

#14 Gody
ano a hlavně taky posunou o 3, protože jinak můžeš mačkat enter do aleluja

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
13. 9. 2012   #16
-
0
-

Ten +posun v podmienke by tam nemal byť.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ingiraxo+15
Grafoman
13. 9. 2012   #17
-
0
-

#16 vitamin
taky mi to přišlo divný, ale když jsem si to před chvílí zkusil, tak to nereagovalo na enter a přitom by mělo, takto to reaguje bez problému

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
13. 9. 2012   #18
-
0
-

Tak to je divné  

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #19
-
0
-

Asi už vím, proč tam máš ten posun.... \n je v desítkové soustavě 10... když k tomu přičteš ten posun je to právě ta 13 co jsem zmínil pro klávesu enter... je to jen náhoda, že ti to tak vyšlo. Když si změníš hodnotu posunu už ti to neukončí po stisku enteru. Takže nejlepší bude použít to řešení s 13 co jsem psal. 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main(){
    
    int c;
    const int posun = 4;
    
    while( (c=getch()) != 13 ) putch(c+posun);
    
    return 0;
}
Nahlásit jako SPAM
IP: 213.129.139.–
ingiraxo+15
Grafoman
13. 9. 2012   #20
-
0
-

#19 Gody
však my víme, ale je divný že to chce taky posunou v podmínce o 3... protože getch vrací vstupní znak a tu 3 přičítáš pouze u výpisu, takže by to mělo porovnat s \n a né \n+3 :)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gody
~ Anonymní uživatel
10 příspěvků
13. 9. 2012   #21
-
0
-

#20 ingiraxo

Snažím se to vysvětlit, ale jaksi se mi to asi nedaří. No když, ale zadáš posun o 5 třeba... už ti to neukončí program. Jede to stále v cyklu, protože \n v desítkové je 10 plus posun (5), což je 15. Takže proto píšu, že to byla náhoda to (int)'\n' + posun... u jiných posunů to fungovat nebude.

PS: Když jste měli posun o 3.. tak z toho vylezl právě ten ENTER v desítkové 13 ( 10 + posun o tři ).

Nahlásit jako SPAM
IP: 213.129.139.–
vitamin+8
Grafoman
13. 9. 2012   #22
-
0
-

Tuším getche() nevracia hodnoty kódované podľa ascii.

edit: Tak nakoniec getche vracia po stlačení enteru '\r' a nie '\n' .

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 72 hostů

Podobná vlákna

Alternativa Conio.h — založil BezMozek

Conio/pdcurses. — založil Johanka z Jarku

Hláška se nevypisuje — založil Yohaku

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý