Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program liczący pola figur C

Ostatnio zmodyfikowano 2018-12-29 23:52
Autor Wiadomość
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 :,(

C/C++
#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;
}
P-173358
pekfos
» 2018-12-29 22:00:24
Po co to?
C/C++
default: menu();
P-173359
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.
P-173360
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.
P-173361
pekfos
» 2018-12-29 23:35:22
Wywal te default. To też:
C/C++
while(( getchar() ) != '\n' );

Żeby białe znaki się nie łapały jako wczytywany znak, dodaj spację przed %c:
C/C++
scanf( " %c", & w );
P-173362
Ratto001
Temat założony przez niniejszego użytkownika
» 2018-12-29 23:52:43
Teraz jest ok, działa wszystko. Dziękuję! :D
P-173363
« 1 »
  Strona 1 z 1