#36 Samot10
Skvělá práce. Jednoduchý a funguje to.
#35 feki
Děkuji za návrhy určitě je také vyzkouším.
Problem solved, může se to uzavřít.
V cyklu to mám proto, abych ošetřil to, když uživatel zadá jinou hodnotu než má, tak se to vrátí a opět ho vyzve, aby zadal hodnotu, kterou má zadat. Problém je, když zadá více znaků, tak tak se cyklus proběhne několikrát.
Tímto jsem ošetřil alespoň to, že když zadá jeden špatný znak, tak mu to vypíše jen jednou.
if (c=='\n'){
scanf("%c",&c);
}
Abych ošetřil i ostatní znaky, bych musel to použít několikrát a možná by to v tom programu dělalo bordel. Zkusím to udělat a pak sem napíši jak to dopadlo.
Omlouvám se, že jsem se zde už neukázal, ale jsem intrák a tam nemám přístup k netu. Po několika marných pokusech a kompletním překopáním programu. Když jsem to nemohl najít nikde na netu, mne to už začalo štvát a zeptal jsem se učitele.
Poradil mi ať tam dám tohle.
scanf("%c", &c);
if (c=='\n'){
scanf("%c",&c);
}
A zde vám dávám celí program, aby jste viděli k čemu jsem to potřeboval (Vytvořil jsem si projekt Console Application)
"main.c"
#include <stdio.h>
#include <ctype.h>
float PI=3.14159;
extern int zacatek();
extern void kruh();
extern void valec();
int main(){
switch (zacatek()) {
case 'K' : {
kruh();
return 1;
}
case 'V' : {
valec();
return 2;
}
case 'Q' :{
return 0;
}
}
}
pomocny_soubor.c
#include <stdio.h>
#include <ctype.h>
extern float PI;
static float r, h, s;
int zacatek();
void kruh();
void valec();
int zacatek(){
int w=0;
char c;
while(w==0){
printf("Stisknete:\n\"K\" pro vypocet obsahu kruhu.\n\"V\" pro vypocet obsahu valce.\n\"Q\" pro ukonceni programu.\n(Potvrdte ENTERem)\n");
scanf("%c", &c);
if (c=='\n'){
scanf("%c",&c);
}
c = toupper(c);
printf("Zadali jste \"%c\"\n", c);
if( c == 'K' || c == 'V' || c == 'Q' ){
w=1;
}
}
return c;
}
void kruh(){
printf("\nProsim zadejte polomer kruhu.\n");
scanf("%f", &r);
s = PI*r*r;
printf("\nPlocha kruhu je: %.2fcm^2\n", s);
}
void valec(){
printf("\nProsim zadejte polomer valce.\n");
scanf("%f", &r);
printf("Nyni zadejte vysku valce.\n");
scanf("%f", &h);
s = 2*PI*r*(r+h);
printf("\nPlocha valce je: %.2fcm^2\n", s);
}
Snad je to dostatečně přehledný a pochopitelný. Jedná se pouze o výpočet plochy kruhu a válce.
Koukám, že nikdo neví. Ani můj kámoš, se kterým jsem to teď probíral. Nakonec jsem to udělal, tak že jsem vynechal "default" a před "switch" jsem dal cyklus ve kterém pomocí "if" porovnávám vstupní hodnotu se znaky mnou nadefinované v použitých "case".
switch (getchar()){ //Zde to načte i ENTER, kterým musím potvrdit zadaný znak.
case 'A' : bla bla bla...
default : printf("Upozorneni"); //Toto upozornění to vytiskne 2x.
Zdravím,
jsem začátečník a mám problém se čtením z klávesnice. Potřebuji, aby program přečetl první zadaný znak a ostatní nechal být(včetně ENTERU). Pokusím se nastínit problém.
V příkazu "switch" naskenuji z klávesnice znak, vše jde bez problému do té doby, než dojde k části programu "default", kde upozorňuji na zadání špatného znaku, ale upozornění se vytiskne 2x, protože se mi naskenuje i ENTER.
Asi se s tím setkala většina z vás. Zkouším hledat řešení už dlouho leč marně. Pro čtení z klávesnice používám příkaz "getchar".
Předem děkuji za odpovědi. Prosil bych bez urážek. Zeptáš-li se, budeš 5 minut vypadat jako blbec. Nezeptáš-li se, budeš blbcem po celý život.