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

Język C, brak zrozumienia napisanego "menu" w programie.

Object Storage Arubacloud
0 głosów
992 wizyt
pytanie zadane 25 października 2017 w C i C++ przez Dawid98 Użytkownik (830 p.)
edycja 25 października 2017 przez Dawid98
Witam! Mam problem z poniższym napisanym przez siebie programem. Chciałem zrobić "menu" do wyboru, ale gdy odpalę program i chce wybrać przykładowo kwadrat muszę wpisać 2 razy dwójkę, a gdy trójkąt 3 razy trójkę. Nie wiem w czym tkwi problem. :(

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



int main() {
	puts("Witaj! W tym porgramie mozesz wybrac czego pole chcesz liczyc,\naby to zrobic wybierz jedna z ponizszych cyfr");
	puts("Pole prostokata wybierz - 1\nPole kwadratu wybierz - 2\nPole rombu wybierz - 3\nPole trapezu wybierz - 4\nPole kola wybierz - 5\n");
	printf("Tu wpisz numer: ");
	
	int prostokat;
	scanf("%d", &prostokat);
	if(prostokat==1){
		
	int a, b;
	printf("Podaj a: ");
	scanf("%d", &a);
	printf("Podaj b: ");
	scanf("%d", &b);
	printf("Pole prostokata wynosi:%d", a*b);
}
	int kwadrat;
	scanf("%d", &kwadrat);
	if (kwadrat==2){
	int a,b;
	printf("Podaj a: ");
	scanf("%d", &a);
	printf("Podaj b: ");
	scanf("%d", &b);
	printf("Pole kwadratu wynosi:%d", a*b);
}
	int trojkat;
	scanf("%d", &trojkat);
	if(trojkat==3){
	
	int a,h;
	printf("Podaj a: ");
	scanf("%d", &a);
	printf("Podaj h: ");
	scanf("%d", &h);
	printf("Pole trojkata wynosi:%d", a*h*1/2);
	}
	
	return 0;
}

3 odpowiedzi

0 głosów
odpowiedź 25 października 2017 przez obl Maniak (51,280 p.)

Powinieneś raz pobierać nr. menu od użytkownika a później w zależności od podanej przez niego wartości wykonać odpowiednią czynność:

int choose = 0;
scanf("%i", &choose);

if(choose == 1){
  // rysuj prostokąt
}else if(choose == 2){
   // rysuj kwadrat
}else if(choose == 3){
   // rysuj coś tam
}

 

0 głosów
odpowiedź 25 października 2017 przez konrad9001 Początkujący (400 p.)

To co opisałeś dzieje się dlatego, że po pierwszym pobraniu wartości program nie wie co to jest '2', którą wprowadzasz. Uwzględniłeś tylko co dzieje się, gdy użytkownik wprowadzi jedynkę. Gdy wpiszesz '2', to przy pierwszym if program nie ma żadnych instrukcji co zrobić z taką wartością więc nie robi nic. Kilka instrukcji później wartość jest pobierana ponownie i tutaj z kolei program zrobi cokolwiek tylko w przypadku, gdy wprowadzisz '2', bo nie ma poleceń co robić z innymi wartościami. Podobna sytuacja będzie przy trzecim pobraniu wartości, gdybyś w tym miejscu nagle zażyczył sobie obliczyć pole kwadratu to program nie zrobiłby nic bo ma instrukcje do wykonania tylko w sytuacji, gdy wartość jest równa '3'.

Co do poprawienia tego, to jak już ktoś wspomniał wcześniej, wprowadzona liczba powinna wpadać na if, który uwzględnia wszystkie możliwości, a później program na podstawie tej wartości powinien wskoczyć w odpowiedni blok instrukcji do wykonania.

Gdybyś zapisał to np. 

 

if(prostokat == 1)
{
 //instrukcje na pole prostotkata
}
else if(prostokat == 2)
{
//instrukcje na pole kwadratu
}
else if(prostokat == 3)
{
//instrukcje na pole trojkata
}

wtedy program odczyta wartość i sprawdzi pierwszy warunek, jeśli nie uda się go spełnić wtedy sprawdzi drugi itd. a wskoczy tylko tam, gdzie uda mu się uzyskać zgodność.

Zamiast instrukcji if można też użyć instrukcji switch:
 

switch(prostokat)
{
 case 1:
  //jakieś instrukcje
 break;
 case 2:
  // jakieś instrukcje
  break;
  itd.
}

efekt będzie taki sam.

0 głosów
odpowiedź 25 października 2017 przez k3ybo4rd Obywatel (1,180 p.)

Poeksperymentuj sobie z instrukcją switch :-) jest to instrukcja wyboru

int wybor;
printf("Wybierz opcję: \n");
printf("1. Dodawanie \n");
printf("2. Odejmowanie \n");
scanf("%d", &wybor);
int a, b, wynik;

switch(wybor)
{
    case 1:
         printf("Podaj a: \n");
         scanf("%d", &a);
         printf("Podaj b: \n");
         scanf("%d", &b);
         wynik = a + b;
         printf("Wynik: %d\n", wynik);
    break;
    case 2:
         printf("Podaj a: \n");
         scanf("%d", &a);
         printf("Podaj b: \n");
         scanf("%d", &b);
         wynik = a - b;
         printf("Wynik: %d\n", wynik);;
    break;

    default:
        printf("Brak opcji\n");
};

 

Podobne pytania

0 głosów
1 odpowiedź 322 wizyt
pytanie zadane 15 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
+1 głos
2 odpowiedzi 142 wizyt
pytanie zadane 28 października 2016 w C i C++ przez chacken Użytkownik (820 p.)
0 głosów
2 odpowiedzi 1,443 wizyt
pytanie zadane 22 października 2017 w C i C++ przez Krystian01 Nowicjusz (150 p.)

92,563 zapytań

141,415 odpowiedzi

319,593 komentarzy

61,948 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...