Ratto001 Temat założony przez niniejszego użytkownika |
Program liczący pola figur C » 2018-12-29 20:54:45 Witam, muszę napisać w C program liczący za pomocą funkcji void pole prostokąta (a), koła (b) i trójkąta (c) posiadający menu umożliwiające wariantowe i wielokrotne wykonywanie obliczeń. Mam błąd, którego nie mogę wykryć, program kompiluje się normalnie; po odpaleniu wyświetla się menu, wpisuję jakąś opcję, np. a i program nie reaguje wcale - menu wyświetla się znowu, wpisuję a drugi raz - wtedy normalnie prosi o podanie wymiarów i liczy, inne opcje zaczynają działać ok, ale jak wpiszę coś innego niż a, b, c lub q, mimo że wyświetla się menu - tak jak powinno - jeśli chcę znowu wybrać jedną z opcji do liczenia pola, znowu literkę trzeba wpisać dwa razy po dwóch menu. Była już przestawiana kolejność różnych elementów, zamiast getchar: fflush(stdin), memset i próbowane inne sposoby czyszczenia bufora, ale chyba chodzi o rozstawienie kodu w programie. Gdzie tkwi błąd? Proszę o pomoc :,( #include<stdio.h> #include<math.h> #include<stdlib.h>
char menu( void ); void pole_prostokata( void ); void pole_kola( void ); void pole_trojkata( void );
void pole_prostokata( void ) { float a, b, P; printf( "Podaj dlugosci bokow a i b prostokata: " ); scanf( "%f%f", & a, & b ); P = a * b; printf( "Pole prostokata jest rowne: %f\n", P ); }
void pole_kola( void ) { float r, P; printf( "Podaj dlugosc promienia r kola: " ); scanf( "%f", & r ); P = 3.1415 * r * r; printf( "Pole kola jest rowne: %f\n", P ); }
void pole_trojkata( void ) { float a, h, P; printf( "Podaj dlugosc a boku oraz wysokosc h trojkata: " ); scanf( "%f%f", & a, & h ); P =( a * h ) / 2.0; printf( "Pole trojkata jest rowne: %f\n", P ); }
int main() { char wybor; while( 1 ) { wybor = menu(); switch( wybor ) { case 'a': pole_prostokata(); break; case 'b': pole_kola(); break; case 'c': pole_trojkata(); break; case 'q': return( 0 ); default: menu(); } } }
char menu( void ) { char w; puts( "Program obliczajacy pola wybranych figur" ); puts( "a) pole prostokata" ); puts( "b) pole kola" ); puts( "c) pole trojkata" ); puts( "q) zakoncz" ); while(( getchar() ) != '\n' ); scanf( "%c", & w ); return w; }
|
|
pekfos |
» 2018-12-29 22:00:24 |
|
Ratto001 Temat założony przez niniejszego użytkownika |
» 2018-12-29 22:58:35 Po to, żeby dla przypadków innych niż a,b,c i q wyświetlić menu ponownie. |
|
Ratto001 Temat założony przez niniejszego użytkownika |
» 2018-12-29 23:10:05 Z usuniętym/przestawionym w inne miejsce defaultem program też nie działa jak powinien. |
|
pekfos |
» 2018-12-29 23:35:22 Wywal te default. To też: while(( getchar() ) != '\n' );
Żeby białe znaki się nie łapały jako wczytywany znak, dodaj spację przed %c: |
|
Ratto001 Temat założony przez niniejszego użytkownika |
» 2018-12-29 23:52:43 Teraz jest ok, działa wszystko. Dziękuję! :D |
|
« 1 » |