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

Switch wewnątrz funkcji własnej

VPS Starter Arubacloud
0 głosów
457 wizyt
pytanie zadane 7 listopada 2017 w C i C++ przez Mateusz Cybulski Nowicjusz (120 p.)
edycja 8 listopada 2017 przez Mateusz Cybulski

Jestem mocno początkujący (dopiero się uczę) i właśnie staram się zrobić program, który w wybranej wagi i wybranej jednostki europejskiej wylicza wagę w wybranej jednostce amerykańskiej. Na początek chciałem poprosić użytkownika o liczbę i kliknięcie odpowiedniego do punktu w menu klawisza, a następnie przeliczyć według podanych danych liczbę z dowolnej jednostki na gram.Chciałem to zrobić przy pomocy własnej funkcji, a wewnątrz niej umieścić switcha powiązanego z menu. Domyślam się, że da się to prawdopodobnie zrobić łatwiej, ale chodzi mi tylko o naukę. Oto kod:

#include <iostream>
#include <windows.h>

using namespace std;

float masa;char jednostka;

float masa_w(float m);


int main()
{
    for(;;)
    {
    cout << "Wpisz liczbę: ";
    cin >> masa;
    cout<<endl;
    cout<<"Wybierz jednostke"<<endl;
    cout<<endl;
    cout<<"1.mg"<<endl;
    cout<<"2.g"<<endl;
    cout<<"3.dag"<<endl;
    cout<<"4.kg"<<endl;
    cout<<"5.tona"<<endl;
    masa_w(masa);
    cout<<masa_w;




    }




}
float masa_w(float m)
{
    switch (jednostka)
{

        case'1':return m*1000;
        case'2':return m ;
        case'3':return m*0.1;
        case'4':return m*0.001;
        case'5':return m*0.000001;
}
   return 0;
}

 

Mniej więcej ogarnąłem aplikację,jednak dodaje ona 1 na końcu wyniku. Domyśla się ktoś jaki jest powód?

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>

using namespace std;

float masa;char jednostka;char jednostka2;

float masa_w(float m);



int main()
{
    for(;;)
    {
    cout << "Wpisz liczbê: ";
    cin >> masa;
    cout<<endl;
    cout<<"Wybierz jednostke"<<endl;
    cout<<endl;
    cout<<"1.mg"<<endl;
    cout<<"2.g"<<endl;
    cout<<"3.dag"<<endl;
    cout<<"4.kg"<<endl;
    cout<<"5.tona"<<endl;
    jednostka=getch();
    masa_w(masa);
    cout<<masa_w<<endl;
    } return 0;




}
float masa_w(float m)
{
    switch (jednostka)
{

        case'1':cout<< m*1000; break;
        case'2':cout<< m; break;
        case'3':cout<< m*0.1; break;
        case'4':cout<< m*0.001; break;
        case'5':cout<< m*0.000001; break;
}
   return 0;
}

 

komentarz 7 listopada 2017 przez Patryk Krajewski Nałogowiec (26,170 p.)
Ale jakie jest pytanie?
komentarz 7 listopada 2017 przez Mateusz Cybulski Nowicjusz (120 p.)
Dlaczego powyższy kod nie działa prawidłowo? ( nie wyświetla odpowiednio obliczonej liczby, a zamiast tego powtarza cały formularz)

2 odpowiedzi

0 głosów
odpowiedź 8 listopada 2017 przez Marchiew Dyskutant (7,690 p.)
1. Po cout<<„wybierze jednostke” nie masz cin>> jednostka więc jak masz wybrać?

2. Na końcu każdego wiersza z case daj: break;

Wychodzisz wtedy z niego.

3. Mógłbyś wyrzucić swoją funkcję przed funkcję main i zmienić wywołanie na: masa_w(masa, jednostka), a w main cout << masa_w(masa, jednostka) zamiast 2 linijek

 

EDIT: nie baw się w zmienne globalne czyli takie poza jakąkolwiek funkcją. Wrzuć je na początek main, a „float masa_w(float m);” nie musisz pisać
komentarz 8 listopada 2017 przez the_danger Gaduła (4,800 p.)
2. Niepotrzebne, jest return
0 głosów
odpowiedź 8 listopada 2017 przez Bondrusiek Maniak (61,370 p.)

Witam,

najważniejszą rzeczą, którą zapomniałeś jest przypisanie zmiennej jednostka wartości.

#include <iostream>
#include <windows.h>//Po co Ci ta biblioteka, pamiętaj żeby minimalizować kod
//jak bibilioteka jest niepotrzebna to ją wyrzuć
using namespace std;

float masa;char jednostka;//przypisuj zmiennym wartości przy deklaracji
//to dobra praktyka np. float masa =0; char jednostka='\0'
float masa_w(float m);//nazwa funkcji nic nie mówi 
//mógłbyś nazwać funkcje np. getWeight(float weight)

int main()
{
    for(;;)
    {
            cout << "Wpisz liczbe: ";
            cin >> masa;
            cout<<endl;
            cout<<"Wybierz jednostke"<<endl;
            cout<<endl;
            cout<<"1.mg"<<endl;
            cout<<"2.g"<<endl;
            cout<<"3.dag"<<endl;
            cout<<"4.kg"<<endl;
            cout<<"5.tona"<<endl;
            cin >> jednostka ;//Tu powinien być pobierana wartość jednostka
            cout << masa_w(masa) << endl; // można bezpośrednio wywołać funkcje
//warunkiem jest to aby ta funkcja coś zwracała

    }



    return 0;//dzięki tamu możesz zobaczyć co zwróci program
//w przypadku sukcesu 0
}
float masa_w(float m)
{
    switch (jednostka)
{

        case'1':return m*1000;
        case'2':return m ;
        case'3':return m*0.1;
        case'4':return m*0.001;
        case'5':return m*0.000001;
}
   return 0;
}

 

Podobne pytania

0 głosów
3 odpowiedzi 176 wizyt
pytanie zadane 19 listopada 2023 w JavaScript przez Piotrek2713 Mądrala (5,320 p.)
0 głosów
1 odpowiedź 154 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 212 wizyt
pytanie zadane 16 października 2016 w C i C++ przez Jakub Olszak Użytkownik (540 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...