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;
}
}
Fórum › C / C++
Pomoc s vylepšením programu (vymazání obrazovky a terminálový vstup)
#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
}
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...
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
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
Prosím pomoc - vložení funkce do programu C++ — založil knive
Potřeboval bych pomoc s threadingem v tomto programu — založil Webstrider
C# Vymazani souboru — založil aTTix
Moderátoři diskuze