Pomoc s vylepšením programu (vymazání obrazovky a terminálový vstup) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s vylepšením programu (vymazání obrazovky a terminálový vstup) – C / C++ – Fórum – Programujte.comPomoc s vylepšením programu (vymazání obrazovky a terminálový vstup) – C / C++ – Fórum – Programujte.com

 

jája0
Newbie
8. 4. 2007   #1
-
0
-

Ahoj, jako nováček v tomto fóru a nováček programování v C vás chci poprosit o pomoc se dvěma problémy, na které jsem narazil při tvorbě svého prográmku Alkoholtest.

1) jak se dá v C smazat obrazovka a nastavit kurzor do levého horního rohu obrazovky? Zatím se mi to podařilo pouze přes printf("\n"); vloženého do cyklu for, což se mi nezdá moc elegantní a navíc kurzor zůstane ve spodní části obrazovky? Před tím jsem programoval ve FoxPro a tam na to byl jednoduchý příkaz "clear", tak si myslím že v C by mohlo být něco podobného.

2) nefunguje mi příkaz getchar() když ho chci přinutit, abych pomocí něho mohl rozhodnout o provedení dalšího výpočtu (A/N), program ho prostě úplně ignoruje, přeskočí ho a skončí. Proto musím používat scanf, ale zde fungují pouze čísla, nevíte kde dělám chybu?

Níže uvádím tento program a pod ním alternativu s getchar(), která mi nefunguje.
Moc děkuji za pomoc.


#include <stdio.h>

int main()
{
int alkohol, pocet, pocetpiv, muz, dalsi;
float deci, procent, vaha, pohlavi, promilevkrvy, odbouravani;

while (1){
printf("\n VYPOCET ALKOHOLU V KRVY A DOBA ODBOURAVANI Z KRVE\n");
printf("\n Jsi muz nebo zena? Muz .... 1");
printf("\n Zena ... 2\n");
printf(" Vyber si: ");
scanf("%d", &muz);

if (muz == 1 ? pohlavi = 0.68 : pohlavi = 0.55){
}

printf("\n Zadej svoji vahu v kg : ");
scanf("%f", &vaha);

printf("\n\n Co jsi pil? Pivo 10 st. .... 1");
printf("\n Pivo 12 st. .... 2");
printf("\n Vino ........... 3");
printf("\n Destilat ....... 4");

printf("\n Vyber si: ");
scanf("%d", &alkohol);

switch (alkohol)
{
case 1:
printf("\n Kolik 10 st. piv jsi vypil? ");
scanf("%d", &pocetpiv);
deci = pocetpiv * 5;
procent = 2.7;
break;
case 2:
printf("\n Kolik 12 st. piv jsi vypil? ");
scanf("%d", &pocetpiv);
deci = pocetpiv * 5;
procent = 3.7;
break;
case 3:
printf("\n Kolik decilitru jsi vypil? ");
scanf("%f", &deci);
procent = 12;
break;
case 4:
printf("\n Kolik decilitru jsi vypil? ");
scanf("%f", &deci);
procent = 40;
break;
default:
printf("\n Spatne cislo, zacni znovu !!!");
}

promilevkrvy = ((deci * procent) * 0.8) / (vaha * pohlavi);
odbouravani = promilevkrvy / 0.15;

printf("\n---------------------------------------------\n");
printf(" V krvy mas cca %4.2f promile alkoholu !!!\n", promilevkrvy);
printf("\n Strizlivy budes priblizne za %3.1f hodiny !!!", odbouravani);
printf("\n---------------------------------------------\n");

printf("\nChces dalsi vypocet? (ano ... 1, ne ... 2) : ");
scanf("%d", &dalsi);
if (dalsi == 1){
continue;
}
else
break;
}
}


Alternativa pro rozhodnutí o dalším výpočtu, která nefunguje.

printf("\nChces dalsi vypocet? (ano ... 'A', ne ... 'N') : ");
dalsi = getchar();

if (dalsi == 'a' || dalsi == 'A'){
continue;
}
else
break;
}
}

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
8. 4. 2007   #2
-
0
-



#include <stdio.h>
#include <ctype.h>

int main()
{
int alkohol, pocet, pocetpiv, muz, dalsi;
float deci, procent, vaha, pohlavi, promilevkrvy, odbouravani;

while (1){
printf("\n VYPOCET ALKOHOLU V KRVY A DOBA ODBOURAVANI Z KRVE\n");
printf("\n Jsi muz nebo zena? Muz .... 1");
printf("\n Zena ... 2\n");
printf(" Vyber si: ");
scanf("%d", &muz);

//if (muz == 1 ? pohlavi = 0.68 : pohlavi = 0.55){
// }
// ternarni operator se pouziva takhle
pohlavi = (muz == 1) ? 0.68f : 0.55f;



printf("\n Zadej svoji vahu v kg : ");
scanf("%f", &vaha);

printf("\n\n Co jsi pil? Pivo 10 st. .... 1");
printf("\n Pivo 12 st. .... 2");
printf("\n Vino ........... 3");
printf("\n Destilat ....... 4");

printf("\n Vyber si: ");
scanf("%d", &alkohol);

switch (alkohol)
{
case 1:
printf("\n Kolik 10 st. piv jsi vypil? ");
scanf("%d", &pocetpiv);
deci = pocetpiv * 5;
procent = 2.7;
break;
case 2:
printf("\n Kolik 12 st. piv jsi vypil? ");
scanf("%d", &pocetpiv);
deci = pocetpiv * 5;
procent = 3.7;
break;
case 3:
printf("\n Kolik decilitru jsi vypil? ");
scanf("%f", &deci);
procent = 12;
break;
case 4:
printf("\n Kolik decilitru jsi vypil? ");
scanf("%f", &deci);
procent = 40;
break;
default:
printf("\n Spatne cislo, zacni znovu !!!");
}

promilevkrvy = ((deci * procent) * 0.8) / (vaha * pohlavi);
odbouravani = promilevkrvy / 0.15;

printf("\n---------------------------------------------\n");
printf(" V krvy mas cca %4.2f promile alkoholu !!!\n", promilevkrvy);
printf("\n Strizlivy budes priblizne za %3.1f hodiny !!!", odbouravani);
printf("\n---------------------------------------------\n");

printf("\nChces dalsi vypocet? (ano ... 1, ne ... 2) : ");
//scanf("%d", &dalsi);
while(getchar()!= '\n'); // obcas zustanou ve vstupni fronte znaky - je treeba ji vyprazdnit
dalsi = toupper(getchar()); // precte vstup a prevede na velke pismeno
if (dalsi == 'A'){
continue;
}
else
break;
}

return 0; // fce main musi neco vracet
}

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
8. 4. 2007   #3
-
0
-

ad 1) na to ve standardu neni zadna fce, da se to obejit dvema zpusoby, ale oba jsou platform. zavisle.
napr.(nebo na Win napsat vlastni, pomoci WinAPi fci):



void clrscr()
{
#ifdef UNIX
system("clear");
#else
system("CLS");
#endif
}

// pouziti
clrscr();

Jinak tohle reseni asi neni moc vhodne, ale je nejjednodussi, ptz pri kazem zavolani system se musi zavolat prikazovy interpret - ten provede patricny prikaz a nasledne preda rizeni zpet programu...

Nahlásit jako SPAM
IP: ...–
jája0
Newbie
8. 4. 2007   #4
-
0
-

Díky moc Juro, hodně jsi mi pomohl.

Nahlásit jako SPAM
IP: ...–
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, 25 hostů

Podobná vlákna

Pomoc pri tvoreni programu — založil Marek066

Pomoc pri tvorbe programu — založil Jarda Hlaváček

C# Vymazani souboru — založil aTTix

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ý