Wypis menu

0
#include <stdio.h>
#define pi 3.14159
int wypis(void);
void prostokat(void);
void kolo(void);
void trojkat(void);

main()
{
float a,b,r;
int q;

do{

q=wypis();

 switch(q)
 {
  case 1: 
   prostokat();
    break;
  case 2:
   kolo();
  break;
  case 3:
   trojkat();
  break;
  case 4:
       printf("koniec programu");
       break;
  default:
               printf("wybierz opcje z menu\n");
               break;
  }      }
  while(q!=4);

}

int wypis(void){
int q;
 char i;
 FILE* menu;
system("clear");
printf("\n\n");

menu=fopen("cw08-05.menu","r");

while(!feof(menu))
 {
 fscanf(menu,"%c",&i);
 printf("%c",i);
 }

fclose(menu);
 printf("\n\n**Wybierz co chcesz zrobic**\n\n ");
 scanf("%d",&q);
return q;
}

void prostokat(void)
{

float a,b,c;
printf("Podaj wartosci bokow prostakata: ");
scanf("%f %f",&a,&b);
if(a<=0 || b<=0)
printf("wartosci bokow musza byc wieksze od 0");
else{
c=a*b;

printf("Pole prostokata o bokach %.2f %.2f wynosi %.2f",a,b,c);
}}

void kolo(void)
{
float a,c;
printf("Podaj promien kola");
scanf("%f",&a);
if(a<=0)
printf("promien ma byc wiekszy od 0");
else{
c=pi*a*a;
printf("Pole kola o promieniu %.2f wynosi %.2f",a,c);
}}

void trojkat(void)
{
float a,b,c;
printf("Podaj dlugosc podstawy i wysokosc trojkata");
scanf("%f %f",&a,&b);
if(a<=0 || b<=0)
printf("dlugosc i wysokosc ma byc wieksza odd 0");
else{
c=(a*b)/2;
printf("Pole trojkata o dlugosci podstawy %.2f i wysokosci %.2f wynosi %.2f",a,b,c);
}}

mam taki problem, że wypisuje ładnie wszystko działa ale kiedy w menu nie wybiore zadnej opcji tylko wpisze np "e" zamiast 1,2,3 czy 4 to program się zapętla i wypisuje menu przez cały czas ;] myślałem, że ten default to załatwi ale niestety dalej się tak robi. Jakieś sugestie/pomysły?
Pozdrawiam!

1

Proponuje zaczać od SZUKANIA a nie od pisania.
Zabezpieczenie przed wpisywaniem liter

A kod który pokazałeś to estetyczna tragedia. Formatowałeś go metodą random()? o_O

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0