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

Operator cin i cout

0 głosów
870 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,440 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ź 3,125 wizyt
pytanie zadane 25 października 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
0 głosów
1 odpowiedź 936 wizyt
pytanie zadane 1 czerwca 2019 w C i C++ przez Karol Bychowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 519 wizyt

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...