• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operator cin i cout

Object Storage Arubacloud
0 głosów
746 wizyt
pytanie zadane 13 marca 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

Czesc robie zadanie z ksiazki i mam problem dlaczeogo ostatnia wartosc to jakies dziwne znaki ?

main.cpp

#include <iostream>
#include "golf.h"

using namespace std;

int main()
{
    golf *g = new golf[3];

    for(int i=0; i<3; i++) {
        setgolf(g[i]);
    }

    for(int i=0; i<3; ++i) {
        showgolf(g[i]);
    }
    return 0;
}

golf.h


#include <iostream>

using namespace std;

const int Len = 40;

struct golf {

    char fullname[Len];
    int handicap;
};

void setgolf(golf & g, const char * name, int hc);

void setgolf(golf & g);

void handicap(golf & g, int hc);

void showgolf(const golf &g);

golf.cpp

#include <iostream>
#include "golf.h"

using namespace std;

void setgolf(golf & g, const char * name, int hc) {

    name = g.fullname;
    g.handicap = hc;
}
void setgolf(golf & g) {

    char * name;
    int hc;
    cout << "Podaj nazwe: ";
    cin>>name;
    name = g.fullname;
    cin.clear();
    cin.sync();
    cout << "Podaj ilosc: ";
    cin>>hc;
    g.handicap = hc;
    cin.clear();
    cin.sync();
}

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

void showgolf(const golf &g) {

    cout << "Nazwa: "<<g.fullname<<endl;
    cout << "Handicap: "<<g.handicap<<endl;

}

 

komentarz 13 marca 2019 przez Secrus Nałogowiec (32,880 p.)
A trochę jaśniej? Czym dla ciebie jest "ostatnia wartość"?
1
komentarz 14 marca 2019 przez Bondrusiek Maniak (61,370 p.)

@Michał_Warmuz,

BTW,

Nie potrzebnie używasz using namespace std; w pliku nagłówkowym. Nigdzie tam to nie wykorzystujesz a po drugie to zła praktyka

https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice

1 odpowiedź

+1 głos
odpowiedź 13 marca 2019 przez Marcin Siniarski Gaduła (4,420 p.)
wybrane 14 marca 2019 przez Michał_Warmuz
 
Najlepsza

W twoim kodzie widać kilka błędów. Ogólnie nie mogłeś się zdecydować czy pisać w C++ czy w C.
Słyszałeś o czymś takim jak klasa string?

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

Źle przypisujesz argumenty. strcpy() stworzy kopię zamiast przypisywać wskaźnik.

 

void setgolf(golf & g) {
 
    //char * name;
    int hc;
    cout << "Podaj nazwe: ";
    cin>>name;
    //name = g.fullname;
    //cin.clear();
    cin.sync();
    cout << "Podaj ilosc: ";
    cin>>hc;
    g.handicap = hc;
    //cin.clear();
    cin.sync();
}

char* name;
cin >> name;

Tu leży pies pogrzebany. (Pytanie na stackoverflow z podobnym problemem)
1. char* i cin to złe połączenie. Polecam zamienić to na klasę string.
2. char* to wskaźnik!  W tej sytuacji wskazuje on na nic
3. cin.clear() - czyści flagi błędu; cin.sync() - synchronizuje z strumieniem stdin (usuwając pozostałe litery do wczytania)

 

int main() {
    golf *g = new golf[3];
//memset(g,0,sizeof(golf)*3);
//...
}

Jeśli coś dalej jest nie tak, warto też użyć memset() przy dynamicznej alokacji pamięci aby wyczyścić ją.

komentarz 14 marca 2019 przez Michał_Warmuz Mądrala (5,830 p.)
To jest zadanie z ksiazki i tam w sstruktrze jest tak

char fullname[Len] oraz int handicap robie zadanie z ksiazki

Podobne pytania

0 głosów
1 odpowiedź 2,601 wizyt
pytanie zadane 25 października 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
0 głosów
1 odpowiedź 581 wizyt
pytanie zadane 1 czerwca 2019 w C i C++ przez Karol Bychowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 403 wizyt

92,568 zapytań

141,424 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...