Problem z działaniem programu
Ostatnio zmodyfikowano 2009-11-07 14:42
kasprus Temat założony przez niniejszego użytkownika |
Problem z działaniem programu » 2009-11-06 20:47:33 Witam. Rozpoczynam naukę programowania. Napisałęm ostatnio prosty program, który po wpisaniu imienia wyznacza jego płeć(oczywiście tylko część wyjątków została uwzględniona). Kod wygląda następująco: #include<iostream> using namespace std; int main() { int c = 0, x = 0; char a[ c ], b[ c ]; cin >> a; x = strlen( a ); if( a[ x - 1 ] == 'a' && a != "Kuba" && a != "Barnaba" && a != "Kosma" && a != "Bonawentura" && a != "Barnaba" ) cout << "K"; else if( a == "Kuba" || a == "Barnaba" || a == "Kosma" || a == "Bonawentura" || a == "Barnaba" ) cout << "M"; else if( a[ x - 1 ] != 'a' ) cout << "M"; system( "pause" ); return 0; } Chciałbym wiedziec, dlaczego po wpisaniu imienia "Kosma" program pokazuje "K", a nie "M", oraz jak go poprawić. Bardzo proszę o pomoc. |
|
WinerFresh |
» 2009-11-06 21:51:06 Ty się ciesz, że to ci się w ogóle skompilowało. Potem grzecznie weź książkę do C++ i zapier... z nauką zanim ja cię dorwę i cię... wyprostuję!!! |
|
malan |
» 2009-11-06 23:49:46 Spójrz co napisałeś: int c = 0, x = 0; char a[ c ], b[ c ];
Szczególną uwagę zwróć na 'c' ;p. |
|
kasprus Temat założony przez niniejszego użytkownika |
Poprawiony kod » 2009-11-07 09:52:37 Poprawiłem kod, ale to nic nie dało. Tak w ogóle to "c=0" nie ma zbytniego znaczenia, ponieważ jak wcześniej go nie podam to i tak bedzie równe 0. Czy ktoś wie dlaczego to jest źle?: #include<iostream> using namespace std; int main() { int c, x; char a[ c ]; cin >> a; while( a[ c ] != '\0' ) { c++; } if( a == "Kuba" || a == "Barnaba" || a == "Kosma" || a == "Bonawentura" || a == "Barnaba" ) { cout << "M"; else if( a[ c - 1 ] == 'a' && a != "Kuba" && a != "Barnaba" && a != "Kosma" && a != "Bonawentura" && a != "Barnaba" ) cout << "K"; else if( a[ c - 1 ] != 'a' ) cout << "M"; system( "pause" ); return 0; } |
|
Elaine |
» 2009-11-07 10:29:34 jak wcześniej go nie podam to i tak bedzie równe 0 |
Nie będzie - będzie miało wartość osobliwą. Czy ktoś wie dlaczego to jest źle? |
Tak. Używasz niezainicjalizowanych zmiennych i rozszerzeń pewnego kompilatora. Wyłącz rozszerzenia w kompilatorze - wtedy przynajmniej reszta świata będzie mogła skompilować twój kod aby sprawdzić co jest źle. A zresztą, masz gotowca: #include <iostream> #include <algorithm> #include <string> using namespace std;
int main() { static const char * const exceptions[] = { "Kuba", "Barnaba", "Kosma", "Bonawentura" }; const int EXCEPTIONS_SIZE = sizeof( exceptions ) / sizeof( char * ); const char * const * const begin = exceptions; const char * const * const end = exceptions + EXCEPTIONS_SIZE; string a; cin >> a; if( a[ a.size() - 1 ] == 'a' && find( begin, end, a ) == end ) cout << "K\n"; else cout << "M\n"; cin.sync(); cin.get(); } |
|
kasprus Temat założony przez niniejszego użytkownika |
rozszerzenia » 2009-11-07 12:10:51 Mam Dev c++. Jak w nim można wyłączyć te rozszerzenia? |
|
Elaine |
» 2009-11-07 14:42:15 Dorzuć kompilatorowi switcha '-pedantic-errors'. Nie pytaj się mnie gdzie, bo nie używam Dev-C++. |
|
« 1 » |