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

C++ Zmiana wielkości znaków w tablicy char (tab char w polu struktury)

Ostatnio zmodyfikowano 2013-12-25 19:43
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
C++ Zmiana wielkości znaków w tablicy char (tab char w polu struktury)
» 2013-12-25 09:20:20
Witam forumowiczów
Do DejaVu - Twoje rozwiązanie też działa idealnie -chodzi o temat: sortowanie pola struktury(tab char) w wektorze.

Odnośnie nowego tematu

Program prosi o podanie nazwy(dwuwyrazowej lub jedno)- jedną z intencji programu jest zmiana wielkości liter początkowych w obu lub w jednym z wyrazów nazwy.
Poniżej przedstawiam kod odpowiedzialny za wprowadzenie danych oraz funkcje zmieniające wielkość liter w wyrazach nazwy:

C/C++
void Dodaj_klienta()
{
    cout << "Ilu klientów chcesz wprowadzić: ";
    cin >> ilu_klientow;
    klient kupujacy;
    char upper;
    char upper_second;
   
    for( int i = 0; i < ilu_klientow; ++i )
    {
        cout << "Wprowadź nazwę klienta: ";
        cin.get();
        cin.getline( kupujacy.nazwa, 30 );
        upper = NaBigger( kupujacy );
        kupujacy.nazwa[ 0 ] = upper;
        upper_second = NaBiggerSecond( kupujacy );
        kupujacy.nazwa[ index ] = upper_second;
        cout << "Ile kg sprzedano: ";
        cin >> kupujacy.kg;
        cout << "Podaj cenę za kilogram: ";
        cin >> kupujacy.price;
        vektor.push_back( kupujacy );
    }
}

char NaBigger( klient & x )
{
    return toupper( x.nazwa[ 0 ] );
}

char NaBiggerSecond( klient & x )
{
    for( index = 0; index < sizeof( x.nazwa ); index++ )
    {
        if( isspace( x.nazwa[ index ] ) ) // szukanie spacji w nazwie dwuwyrazowej
        {
           
            ++index; //przesunięcie z indeksu  spacji na indeks pierwszej litery drugiego wyrazu nazwy
            return toupper( x.nazwa[ index ] );
        }
       
    }
   
   
}

Funkcja char NaBigger(klient & x) - spełnia swoje zadanie czyli zmienia wielkość pierwszej litery w pierwszym wyrazie nazwy.

Natomiast funkcja char NaBiggerSecond(klient & x) - spełnia swoje zadanie tylko jak użytkownik wprowadzi nazwę dwuwyrazową. Po wprowadzeniu nazwy
jednowyrazowej program zgłasz błąd: Expression: c >= -1 && c <= 255.
Po długim czasie i wielu próbach udało mi się wyeliminować błąd ale wtedy funkcja ta nie zmienia  pierwszej litery drugiego wyrazu nazwy na jej duży odpowiednik.
W obecnym , przedstawionym powyżej wydruku funkcji - program zgłasz błąd tak jak podałem 3 wersy wyżej.

Proszę o jakieś sugestje
Pozdrawiam
 Kefirek
P-100098
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-25 19:43:56
Witam ponownie

Temat zamykam bo znalazłem błąd w funkcji dokładnie w warunku pętli było:

C/C++
for( index = 0; index < sizeof( x.nazwa ); i++ ) //powinno byc:
     for( index = 0; index < strlen( x.nazwa ); i++ )

sizeof(x.nazwa) = było 30 czyli rozmiar tablicy co powodowało wyjście za zakres długości wprowadzonego łańcucha

strlen(x.nazwa) = było długości wprowadzonego wyrazu co powodowało normalne wyjście z pętli bez wyjścia poza zakres ostatniego indeksu łańcucha

Pozdrawiam
Kefirek
P-100120
« 1 »
  Strona 1 z 1