Program niespodziewanie kończy działanie

Odpowiedz Nowy wątek
2019-08-27 03:11
0

Siema,
własne przerabiam 'Szkołe programowania' Stephana Praty i napotkałem pewien problem.
Kod wygląda następująco:

#include <iostream>
#include "golf.h"
int decision = 1;
int main()
{
    golf ann;
    golf ebs[3];

    int i = 0;
    setgolf(ann, "Ann Sikora", 24);
    while (setgolf(ebs[i]) && i < 3)
    {
        i++;

    }
showgolf(ann);

    for (int count = 0; count << i; count++)
    {
        showgolf(ebs[count]);
    }
std::cout << std::endl;
    std::cout << "Teraz mozesz zmienic wartosc hc!";

for (int count = 0; count << i; count++)
    {
        static int raw_data;

        std::cout << "dla " << ebs[count].fullname << " :";
        std::cin >> raw_data;
        handicap(ebs[count], raw_data);
        std::cout << std::endl;

    }
    for (int count = 0; count << i; count++)
    {
        showgolf(ebs[count]);
    }

    return 0;
}
#include <iostream>
#include "golf.h"
#include <cstring>
using std::cout;
using std::cin;
using std::endl;

void setgolf(golf& g, const char* name, int hc)
{
    strncpy(g.fullname, name, Len);
    g.handicap = hc;
}
int setgolf(golf& g)
{
    char assist[Len];
    cout << "Podaj pelne imie: ";
    cin.getline(assist, Len);
    if ((assist)[0] == '\0')
    {
        cin.clear();
        return 0;
    }
    else
    {
        strcpy(g.fullname, assist);
        cout << "Podaj hc: ";
        cin >> g.handicap;
        cin.get();
        return 1;
    }
}

void handicap(golf& g, int hc)
{
    g.handicap = hc;
}

void showgolf(const golf& g)
{
    cout << g.fullname << endl;
    cout << g.handicap << endl;
}

PLIK NAGŁOWKOWY

#ifndef GOLF_H
#define GOLD_H

const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
void setgolf(golf& g, const char* name, int hc);
int setgolf(golf& g);
void handicap(golf& g, int hc);
void showgolf(const golf& g);
#endif

do mojej tablicy ebs wprowadzam dane, po zakonczeniu pojawia sie w konsoli jeszcze:
"Ann Sikora
24
Teraz mozesz zmienic wartosc hc!"
Po czym program konczy sie.
Ktoś ma moze pomysł dlaczego program jest przerywany w tym momencie?

Z góry dzięki za pomoc!

edytowany 6x, ostatnio: kq, 2019-08-27 03:27
W sumie pomijając tytuł i brak formatowania (doceniam próby) to nie tak źle z tym postem. - kq 2019-08-27 03:22

Pozostało 580 znaków

2019-08-27 03:27
kq
for (int count = 0; count << i; count++)

<< to zupełnie inny operator niż <, więc petla wykonuje się zero razy.

Swoją drogą, popraw nazwy funkcji. set dla setterów ma sens, ale wtedy jego brak przy ustawieniu handicapu myli (spodziewałem się, że to getter). Wersja setgolf pobierająca wartość z stdin nie powinna istnieć, ale jak już musi to minimum powinna się inaczej nazywać.

BTW: jeśli piszesz w C++ to pisz w C++, a nie w C z elementami C++ ;​)


A może z tym << to jakaś optymalizacja? :P - PerlMonk 2019-08-27 08:39

Pozostało 580 znaków

2019-08-27 09:48
0

Przegapiłem to... wielkie dzięki, tak banalny błąd nie wpadł mi w oko.
Nazwy funkcji są odgórnie narzucone przez autora książki, ale zmienię je :D
Natomiast co masz na myśli mówiąc c z elementami c++?

Pozostało 580 znaków

2019-08-27 10:08
1

na przyklad o to chodzi

void setgolf(golf& g, const char* name, int hc)
{
    strncpy(g.fullname, name, Len);
    g.handicap = hc;
}

w C++ praktycznie nie ma potrzebny uzywac char*. Od tego jest std::string (jest pare przykladow, ale jezeli nie potrafisz tego uzasadnic, to zapewne mozesz smialo uzywac std::string)

#ifndef GOLF_H
#define GOLD_H

const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
void setgolf(golf& g, const char* name, int hc);
int setgolf(golf& g);
void handicap(golf& g, int hc);
void showgolf(const golf& g);
#endif

Zamiast miec klase/strukture z funkcjiami to masz strukture i kilka globalnych funkcji. W ogole nie jest to zgodne z OOP wiec rowniez srednio z C++

edytowany 1x, ostatnio: fasadin, 2019-08-27 10:09
string_view tutaj akurat :​P - kq 2019-08-27 11:11
Wielkie dzieki za sugestie! Z checia wprowadze poprawki. - Snatch and Pizza 2019-08-27 11:23
taaa, to najgorsze w książce Praty. Ludzie myślą, że się uczą Cpp, a okazuje się, że C. - Sunnydev 2019-08-27 11:42
Bo to zadanie jest umieszczone w dziale jeszcze przed obiektowym C++, dlatego pewnie brak klas i metod ;) - knifer0 2019-08-27 18:28
Bo podział materiału jest od xxxx strony. - kq 2019-08-27 18:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0