Problem z opcją w default w programie.

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Witam.
Powoli przerabiam sobie Symfonie C++. Naszło mnie ostatnio na stworzenie takiego małego programu. Nie działa mi w nim jedna opcja tzn. jest 6 opcji do wyboru i 0 jako wyjście. Gdy się wciśnie opcje do np 7 lub inną, która nie jest dostępna z możliwych program działa i liczy nie wiadomo co i skąd, a powinien wyskoczyć napis: Wybrana opcja nieprawidłowa !
Podaję poniżej kod. Proszę o ewentualną poprawę lub wytłumaczenie, gdzie zrobiłem błąd.
Pozdrawiam.

PHP:
/* Program do obliczania pola i obwodu kwadratu, prostokąta i trójkąta
*/
#include <iostream>
int main ()
{
    poczatek:
    std::cout      << "Wybierz opcje ktora Cie interesuje. \n"
                   << "Oblicz: \nnr 1 - pole kwadratu \nnr 2 - obwod kwadratu "
                   << "\nnr 3 - pole prostokata \nnr 4 - obwod prostokata "
                   << "\nnr 5 - pole trojkata \nnr 6 - obwod trojkata \nnr 0 - zakoncz "
                   << "\nPodaj opcje: ";

    int opcja;
    std::cin>>opcja;
    
    switch(opcja)
    {
                  case 1:
                  std::cout<< "Pole kwadratu \n";
                  {
                              int a;
                              double pole;
                  
                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;
                              
                              pole = a*a;
                              
                              std::cout<<std::endl;
                              
                              std::cout<< "Pole kwadratu wynosi: " << a*a << "\n";
                              
                              system("pause");
                              
                              goto poczatek;   
                              }
                  break;
                  
                  case 2:
                  std::cout<< "Obwod kwadratu \n";
                  {
                              int a;
                              double obwod;
                  
                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;
                  
                              obwod=4*a;
                  
                              std::cout<<std::endl;
                  
                              std::cout<< "Obwod kwadratu wynosi: " << 4*a << "\n";
                  
                              system("pause");
                  
                              goto poczatek;
                              }
                  break;

                  case 3:
                  std::cout<< "Pole prostokata \n";
                  {
                              int a;
                              int b;
                              double pole;
                                                            
                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;
                              
                              std::cout<< "Podaj bok b: ";
                              std::cin>> b;
                              
                              pole = a*b;
                              
                              std::cout<<std::endl;
                              
                              std::cout<< "Pole prostokata wynosi: " << a*b << "\n\n";
                              
                              system("pause");             // zrobić opcje ktora pozwoli na
                                                           // zakonczenie typu goto do opcji 0
                              goto poczatek;
                              
                              }
                  
                 break;
                  
                  case 4:
                  std::cout<< "Obwod prostokata \n";
                  {
                              int a;
                              int b;
                              double obwod;
                              
                              std::cout<< "Podaj bok a prostokata: ";
                              std::cin>> a;
                              
                              std::cout<< "Podaj bok b prostokąta: ";
                              std::cin>> b;
                              
                              obwod = 2*a + 2*b;
                              
                              std::cout<<std::endl;
                              
                              std::cout<< "Obwod prostokata wynoski: " << 2*a + 2*b << "\n\n";
                              
                              system("pause");
                              
                              goto poczatek;
                              
                              }
                  
                  break;
                  
                  case 5:
                  std::cout<< "Pole trojkata \n";
                  {
                              int a;
                              int h;
                              double pole;
                              
                              std::cout<< "Podaj bok trojkata: ";
                              std::cin>> a;
                              
                              std::cout<< "Podaj wysokosc trojkata: ";
                              std::cin>> h;
                              
                              pole = (a*h)/2;
                              
                              std::cout<<std::endl;
                              
                              std::cout<< "Pole trojkata wynosi: " << (a*h)/2 << "\n\n";
                              
                              system("pause");
                              
                              goto poczatek;
                              
                              }
                  
                  break;
                  
                  case 6:
                  std::cout<< "Obwod trojkata \n";
                  {
                              int a;
                              int h;
                              double obwod;
                              
                              std::cout<< "Podaj bok trojkata :";
                              std::cin>> a;
                              
                              std::cout<< "Podaj wysokosc trojkata :";
                              std::cin>> h;
                              
                              obwod = (a*h)/2;
                              
                              std::cout<<std::endl;
                              
                              std::cout<< "Obwod trojkata wynosi: " << (a*h)/2 << "\n";
                              
                              system("pause");
                              
                              goto poczatek;
                              }
                  break;
                  
                  case 0:
                  std::cout<< "Zakoncz \n";
                  break;
                  
                  default:                                                             //dlaczego nie działa
                          std::cout<< "Wybrana opcja" <<opcja<< "nieprawidłowa !";  //opcja default?
                          break;
                          
                  
    }

}
 

cyber_pl

Użytkownik
Dołączył
Wrzesień 30, 2009
Posty
187
program jest zgodny ze skladnia i dobrze dziala:

Kod:
cyber@debian:~$ cat ./program.cpp
/* Program do obliczania pola i obwodu kwadratu, prostokąta i trójkąta */
#include <cstdlib>
#include <iostream>
int main ()
{
    poczatek:
    std::cout      << "Wybierz opcje ktora Cie interesuje. \n"
                   << "Oblicz: \nnr 1 - pole kwadratu \nnr 2 - obwod kwadratu "
                   << "\nnr 3 - pole prostokata \nnr 4 - obwod prostokata "
                   << "\nnr 5 - pole trojkata \nnr 6 - obwod trojkata \nnr 0 - zakoncz "
                   << "\nPodaj opcje: ";

    int opcja;
    std::cin>>opcja;

    switch(opcja)
    {
                  case 1:
                  std::cout<< "Pole kwadratu \n";
                  {
                              int a;
                              double pole;

                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;

                              pole = a*a;

                              std::cout<<std::endl;

                              std::cout<< "Pole kwadratu wynosi: " << a*a << "\n";

                              system("pause");

                              goto poczatek;
                              }
                  break;

                  case 2:
                  std::cout<< "Obwod kwadratu \n";
                  {
                              int a;
                              double obwod;

                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;

                              obwod=4*a;

                              std::cout<<std::endl;

                              std::cout<< "Obwod kwadratu wynosi: " << 4*a << "\n";

                              system("pause");

                              goto poczatek;
                              }
                  break;

                  case 3:
                  std::cout<< "Pole prostokata \n";
                  {
                              int a;
                              int b;
                              double pole;

                              std::cout<< "Podaj bok a: ";
                              std::cin>> a;

                              std::cout<< "Podaj bok b: ";
                              std::cin>> b;

                              pole = a*b;

                              std::cout<<std::endl;

                              std::cout<< "Pole prostokata wynosi: " << a*b << "\n\n";

                              system("pause");             // zrobić opcje ktora pozwoli na
                                                           // zakonczenie typu goto do opcji 0
                              goto poczatek;

                              }

                 break;

                  case 4:
                  std::cout<< "Obwod prostokata \n";
                  {
                              int a;
                              int b;
                              double obwod;

                              std::cout<< "Podaj bok a prostokata: ";
                              std::cin>> a;

                              std::cout<< "Podaj bok b prostokąta: ";
                              std::cin>> b;

                              obwod = 2*a + 2*b;

                              std::cout<<std::endl;

                              std::cout<< "Obwod prostokata wynoski: "<< 2*a + 2*b << "\n\n";

                              system("pause");

                              goto poczatek;

                              }

                  break;

                  case 5:
                  std::cout<< "Pole trojkata \n";
                  {
                              int a;
                              int h;
                              double pole;

                              std::cout<< "Podaj bok trojkata: ";
                              std::cin>> a;

                              std::cout<< "Podaj wysokosc trojkata: ";
                              std::cin>> h;

                              pole = (a*h)/2;

                              std::cout<<std::endl;

                              std::cout<< "Pole trojkata wynosi: " << (a*h)/2 << "\n\n";

                              system("pause");

                              goto poczatek;

                              }

                  break;

                  case 6:
                  std::cout<< "Obwod trojkata \n";
                  {
                              int a;
                              int h;
                              double obwod;

                              std::cout<< "Podaj bok trojkata :";
                              std::cin>> a;

                              std::cout<< "Podaj wysokosc trojkata :";
                              std::cin>> h;

                              obwod = (a*h)/2;

                              std::cout<<std::endl;

                              std::cout<< "Obwod trojkata wynosi: " << (a*h)/2 << "\n";

                              system("pause");

                              goto poczatek;
                              }
                  break;

                  case 0:
                  std::cout<< "Zakoncz \n";
                  break;

                  default:                                                             //dlaczego nie działa
                          std::cout<< "Wybrana opcja" <<opcja<< "nieprawidłowa !";  //opcja default?
                          break;


    }

}
cyber@debian:~$ g++ ./program.cpp -o program
cyber@debian:~$ chmod 777 ./program
cyber@debian:~$ ./program
Wybierz opcje ktora Cie interesuje.
Oblicz:
nr 1 - pole kwadratu
nr 2 - obwod kwadratu
nr 3 - pole prostokata
nr 4 - obwod prostokata
nr 5 - pole trojkata
nr 6 - obwod trojkata
nr 0 - zakoncz
Podaj opcje: 8
Wybrana opcja8nieprawidłowa !cyber@debian:~$
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Używam kompilatora Dev-C++ i u mnie wyraźnie po skompilowaniu i wciśnięciu np klawisza 8 liczy jakieś liczby typu pole kwadratu równe jest i jakieś 3 cyfry. W ogóle nie działa ta opcja.
Z jakiego korzystasz kompilatora?
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Dev-CPP to IDE czyli środowisko programistyczne które zawiera w sobie sporo przydatnych narzędzi, m. in. kompilator g++ z którego korzysta cyber_pl (i ja także). Dev-CPP nie jest już chyba rozwijany i może to wina tego, że zawiera starą wersję g++'a. Pobierz g++ pod Windowsa i uruchom go tak:
Kod:
g++ source.cpp -o source.exe
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Dev-CPP to IDE czyli środowisko programistyczne które zawiera w sobie sporo przydatnych narzędzi, m. in. kompilator g++ z którego korzysta cyber_pl (i ja także). Dev-CPP nie jest już chyba rozwijany i może to wina tego, że zawiera starą wersję g++'a. Pobierz g++ pod Windowsa i uruchom go tak:
Kod:
g++ source.cpp -o source.exe
Pobrałem ten g++ dla windows download zainstalowałem włączam go przez cmd i co dalej? Jak wpisuje g++ source.cpp -o source.exe to pisze że nie może wykonać. Pomoże ktoś?
Nie wystarczy podmienić plików które trzeba?
 
Ostatnia edycja:

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Kod:
bash-2.02$ g++ source.cpp -o source.exe
g++: source.cpp: No such file or directory
g++: No input files
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Musisz przejść do katalogu z plikiem źródłowym lub podać pełny adres :)
Kod:
cd C:\\cpp
g++ source.cpp -o source.exe
lub
Kod:
g++ C:\\cpp\\source.cpp -o C:\\cpp\source
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
discovery44 Musisz przejść do katalogu z plikiem źródłowym lub podać pełny adres :)
Kod:
cd C:\\cpp
g++ source.cpp -o source.exe
Co to jest?
I jeszcze jedna sprawa "z plikiem źródłowym" czego? programu tego g++ czy kompilatora? Co uznajesz za plik źródłowy jeśli chodzi Ci o g++? Katalog w którym znajduje się cygnus ms-dos czy np include i katalog g++?

Kod:
cd:C\\cpp
Gdy podaje ścieżkę to poprzez:
1) start - uruchom - cmd następnie przechodzę do katalogu gdzie jest zainstalowany g++ ale po wpisaniu cd C:\\cpp - wyskakuje coś w rodzaju brak pliku czym jest cpp skoro nie ma go w tym katalogu?
2) wchodę do zainstalowanego folderu i odpalam plik cygnus wpisuje
g++ source.cpp -o source.exe i też błąd.
 
Ostatnia edycja:

cyber_pl

Użytkownik
Dołączył
Wrzesień 30, 2009
Posty
187
Nie wystarczy podmienić plików które trzeba?

W ustawieniach devcpp mozna zmienic sciezke do kompilatora g++, zamien ja a bedziesz mogl bezposrednio z devcpp kompilowac bez podawania sciezek.
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Fajnie o to mi chodziło. Teraz tylko powiedzcie mi co zmienić. Wchodzę narzędzia - opcje kompilatora - katalogi. Co teraz zmienić są opcje do wybory: Binaria, Biblioteki, Pliki nagłówkowe C, Pliki nagłówkowe C++?
Jeśli zmieniam same binaria na ścieżka dostępu: X:\cos tam\cygwin-b20\H-i586-cygwin32\bin wyskakuje mi błąd podczas kompilowania - nie jeden dlatego nie opisuje ich tutaj.
Co mam konkretnie zmienić i który plik podać?
Pozdrawiam.
 

sinis

Użytkownik
Dołączył
Wrzesień 3, 2006
Posty
958
Cygwin? Wystarczyło pobrać wersję MinGW. Z tej korzysta DevC++. Binaria to folder "bin" pakietu z g++'em. Pliki nagłówkowe do folder "include". Jeszcze będzie wymagana ścieżka bibliotek linkera - folder "lib".
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Fajnie sinis ale napisz mi czy po prostu po pobraniu MinGW przekopiować plik g++ do pliku bin i linkera również? Czy muszę jednak podawać ścieżki itp?
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Zrobiłem kopie plików z dev-cpp i przekopiowałem wszystkie z MinGW do folderu Dev-cpp a podczas kompilacji nadal jest błąd (kilka błędów). Coś mogłem źle zrobić?
 

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Błędy podczas kompilacji programu.

Kod:
1). 44 X:\Dev-Cpp\include\c++\3.4.2\iosfwd:46,               from X:\Dev-Cpp\include\c++\3.4.2\ios In file included from X:/Dev-Cpp/include/c++/3.4.2/iosfwd:46,               from X:/Dev-Cpp/include/c++/3.4.2/ios 

2). 45 X:\Dev-Cpp\include\c++\3.4.2\ios:44,               from X:\Dev-Cpp\include\c++\3.4.2\ostream                  from X:/Dev-Cpp/include/c++/3.4.2/ios:44,               from X:/Dev-Cpp/include/c++/3.4.2/ostream 

3). 45 X:\Dev-Cpp\include\c++\3.4.2\ostream:45,               from X:\Dev-Cpp\include\c++\3.4.2\iostream                  from X:/Dev-Cpp/include/c++/3.4.2/ostream:45,               from X:/Dev-Cpp/include/c++/3.4.2/iostream 

4). 3 X:\Dev-Cpp\include\c++\3.4.2\iostream:45,               from X:\X\X\Moje dokumenty\Boobie\Programowanie\Pole i obwód kwadratu, prostokąta i trójkąta.cpp                  from X:/Dev-Cpp/include/c++/3.4.2/iostream:45,               from C:/X/X/Moje dokumenty/Boobie/Programowanie/Pole i obwód kwadratu, prostokąta i trójkąta.cpp 

5). 3 X:\X\X\Moje dokumenty\Boobie\Programowanie\Pole i obwód kwadratu, prostokąta i trójkąta.cpp                  from X:\X\X\Moje dokumenty\Boobie\Programowanie\Pole i obwód kwadratu,  prostokąta i trójkąta.cpp  

6). 58 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h parse error before ` __attribute__' 

7).  X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h In function `int  std::__convert_from_v(...)': 

8). 63 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h `__old' undeclared  (first use this function) 

9).   (Each undeclared  identifier is reported only once for each function it appears in.) 

10). 64 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h initializer list  being treated as compound expression 

11). 65 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h initializer list  being treated as compound expression 

12). 65 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h invalid conversion  from `const char*' to `int' 

13). 68 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h `__out' undeclared  (first use this function) 

14). 68 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h `__size' undeclared  (first use this function) 

15). 72 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h redefinition of `int  std::setlocale' 

16). 73 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h parse error before ` delete' 

17). 37 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\gthr.h:96,               from X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++io.h In file included from X:/Dev-Cpp/include/c++/3.4.2/mingw32/bits/gthr.h:96,               from X:/Dev-Cpp/include/c++/3.4.2/mingw32/bits/c++io.h 

18). 47 X:\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++io.h:37,               from X:\Dev-Cpp\include\c++\3.4.2\iosfwd                  from X:/Dev-Cpp/include/c++/3.4.2/mingw32/bits/c++io.h:37,               from X:/Dev-Cpp/include/c++/3.4.2/iosfwd 

19). 44 X:\Dev-Cpp\include\c++\3.4.2\iosfwd:47,               from X:\Dev-Cpp\include\c++\3.4.2\ios                  from X:/Dev-Cpp/include/c++/3.4.2/iosfwd:47,               from C:/Dev-Cpp/include/c++/3.4.2/ios 

20) 45 X:\Dev-Cpp\include\c++\3.4.2\ios:44,               from X:\Dev-Cpp\include\c++\3.4.2\ostream                  from X:/Dev-Cpp/include/c++/3.4.2/ios:44,               from X:/Dev-Cpp/include/c++/3.4.2/ostream 

i jest tego jeszcze dużo więcej.
 
Ostatnia edycja:

Boobie

Użytkownik
Dołączył
Lipiec 25, 2008
Posty
195
Pomoże ktoś co mam robić z tymi błędami?
A może podrzucicie jakiś inny kompilator który mogę używać?
 

cyber_pl

Użytkownik
Dołączył
Wrzesień 30, 2009
Posty
187
to sa pliki naglowkowe do zlej wersji kompialtora, widocznie miales tak stara wersje ze juz podstawowe naglowki sie pozmienialy a raczej ich implementacja w plikach bibliotek ktore pozniej musial by zostac zlinkowane.

problem powinno rozwiazac skopiowanie naglowkow ktore sa zalaczone z kompilatorem migw32 ktorego uzywasz.
 
Do góry Bottom