Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z działaniem programu

Ostatnio zmodyfikowano 2009-11-07 14:42
Autor Wiadomość
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:
C/C++
#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.
P-11331
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ę!!!
P-11334
malan
» 2009-11-06 23:49:46
Spójrz co napisałeś:
C/C++
int c = 0, x = 0;
char a[ c ], b[ c ];
Szczególną uwagę zwróć na 'c' ;p.
P-11338
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?:
C/C++
#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;
    }
P-11339
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:
C/C++
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main()
{
    // w sumie mogłoby to być posorowane alfabetycznie, żeby można było użyć
    // binary_search(), ale mi się już nie chciało.
    static const char * const exceptions[] =
    { "Kuba", "Barnaba", "Kosma", "Bonawentura" }; // tablica z wyjątkami
    const int EXCEPTIONS_SIZE = sizeof( exceptions ) / sizeof( char * ); // rozmiar tejże
    const char * const * const begin = exceptions; // początek tablicy wyjątków, żeby było mniej pisania
    const char * const * const end = exceptions + EXCEPTIONS_SIZE; // koniec jw.
   
    string a; // ze stringiem będzie "trochę" bezpieczniej i wygodniej
    cin >> a; // odczytujemy
    // jeżeli ostatnia litera to 'a' i nie znaleziono w tablicy wyjątków, to mamy kobietę
    if( a[ a.size() - 1 ] == 'a' && find( begin, end, a ) == end )
         cout << "K\n";
    else
         cout << "M\n";
    // system("pause") jest brzydkie. Można to zrobić porządnie.
    cin.sync();
    cin.get();
}
P-11341
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?
P-11346
Elaine
» 2009-11-07 14:42:15
Dorzuć kompilatorowi switcha '-pedantic-errors'. Nie pytaj się mnie gdzie, bo nie używam Dev-C++.
P-11351
« 1 »
  Strona 1 z 1