• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Program w C i kłopot z default

0 głosów
476 wizyt
pytanie zadane 27 września 2015 w C i C++ przez Armando Obywatel (1,870 p.)
zamknięte 28 września 2015 przez event15

Cześć,

Miałem za zadanie przerobić program z C++ na C i nawet mi się udało ale chciałbym się dowiedzieć dlaczego cokolwiek bym w programie nie wykonał to zawsze wyświetli się treść z default "Nie wybrano funkcji". Z góry dzięki ;)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


void p_troj()
{
    float a,b,c,p,S;
    printf("Wpisz dlugosci bokow");
    printf("\na= ");
    scanf("%f",&a);
    printf("\nb= ");
    scanf("%f",&b);
    printf("\nc= ");
    scanf("%f",&c);
    p=(a+b+c)/2;
    S=sqrt(p*(p-a)*(p-b)*(p-c));
    printf("\n\nPole trojkata wynosi: %f",S,"\n");


};
void p_trap()
{
    float a,b,h,S;
    printf("Podaj pierwsza podstawe trapezu ");
    printf("\na= ");
    scanf("%f",&a);
    printf("Podaj druga podstawe trapezu ");
    printf("\nb= ");
    scanf("%f",&b);
    printf("Podaj wysokosc trapezu ");
    printf("\nh= ");
    scanf("%f",&h);
    S=((a+b)*h)/2;
    printf("\n\nPole trapezu wynosi: %f",S,"\n");

};
void p_kola()
{
    float r,S;
    printf("Podaj pierwszy promion kola ");
    printf("nr= ");
    scanf("%f",&r);
    S=3.14*r*r;
    printf("\n\nPole kola wynosi: %f",S,"\n");

};
int main()
{
    char w;
	do
	{
		system("CLS");
		printf("Wybierz co chcesz obliczyc:");
		printf("\n1. Pole trojkata - P");
		printf("\n2. Pole trapezu - T");
		printf("\n3. Pole kola - S");
		printf("\n4. Koniec - K\n");
		scanf("%c",&w);
		switch (w)
		{
			case 'P' : case 'p' :p_troj();break;

			case 'T' : case 't' :p_trap();break;

			case 'S' : case 's' :p_kola();break;

			default : printf("Nie wybrano funkcji\n");break;

		}
		system ("PAUSE");
	}
    while (w!='K'&&w!='k');
    return 0;
}

 

komentarz zamknięcia: problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 27 września 2015 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 28 września 2015 przez Armando
 
Najlepsza

Co?! Dwa case'y na raz? Zmieniaj to jak najszybciej. Do takiego czegoś są ify, nie switch.

komentarz 27 września 2015 przez Armando Obywatel (1,870 p.)
Z tego co wiem to w C++ taki zapis jest raczej prawidłowy i działa bez problemów. Wiem, że C różni się od C++ ale żeby aż tak ? Chyba, że to jest błędny zapis niezależnie od języka w tym wypadku. Oczywiście mogę się mylić. Jeśli tak to proszę o wytłumaczenie.
komentarz 27 września 2015 przez Patrycjerz Mędrzec (192,320 p.)

Z tego, co się uczyłem, nie istnieje taka składnia. Nie wiem, może jestem niedouczony, ale jeśli ci to nie działa, to chyba nie istnieje.

Nawet jeśli, to czy podasz np. p, czy P, to program ci nie wejdzie do danej funkcji, ponieważ jeden z case'ów nie będzie spełniony.

Tutaj zastosuj ify z operatorami logicznymi ||.

komentarz 27 września 2015 przez Armando Obywatel (1,870 p.)

Program działa bez zarzutu i wykorzystuje właśnie owe case'y, więc taka składnia jest raczej poprawna. Problem polegał na tym, że zawsze wyświetlał się napis z funkcji default nawet przy prawidłowym wyborze. Dzięki za odpowiedź, teraz już wiem dlaczego tak się działo ;)
Czyli muszę wyrzucić z programu tego default'a.

komentarz 27 września 2015 przez adrian17 Mentor (355,240 p.)

Z tego, co się uczyłem, nie istnieje taka składnia. 

Jak najbardziej jest, to tak zwany fallthrough. To właśnie jedna z sytuacji w których switch może być potencjalnie lepszy od łańcuszka ifów.

Podobne pytania

0 głosów
0 odpowiedzi 785 wizyt
pytanie zadane 24 marca 2018 w C i C++ przez Mateusz Tocha Bywalec (2,560 p.)
0 głosów
1 odpowiedź 578 wizyt
+1 głos
1 odpowiedź 759 wizyt
pytanie zadane 15 listopada 2017 w C i C++ przez Kamil Kukła Nowicjusz (160 p.)

93,776 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,381 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...