Dynamiczna struktura danych, program przerywa działanie

0

Witam. Dziś zetknąłem się z małym problemem podczas pracowania na dynamicznych strukturach danych. Mój problem wygląda następująco. Mam kod:

struct nazwa{
char przedmiot [50];
int dlugosc;
float waga;
};

/**/

nazwa * wsk = new nazwa;

cin >> wsk -> dlugosc;
cin.get >> (wsk -> przedmiot, 50);  //tutaj musi być błąd
cin >> wsk -> waga;

/**/ //tam dalej wyświetlam dane

No więc o ile mogę swobodnie pobrać dane poprzez

cin >> wsk -> dlugosc;

o tyle po pobraniu wartości program leci do samego końca. Co dla mnie dziwne po zrobieniu małej zamiany w kodzie wszystko działa: cin.get >> (wsk -> przedmiot, 50); //zamiana miejscami
cin >> wsk -> dlugosc;
cin >> wsk -> waga;


Teraz pytanie. Czemu pierwszy sposób nie działa ? Z góry dziękuję za pomoc.
0
cin.get >> (wsk -> przedmiot, 50);  //tutaj musi być błąd

A co to za konstrukcja? Chyba Ci o to chodziło:

cin.get(wsk -> przedmiot, 50);
0

0x ma rację. Do wprowadzania napisów dłuższych niż jedno słowo służą 2 funkcje:

const int MAX = 100;
char tab[MAX];

cin.getline(tab, MAX); // wczytuje znak do nowego wiersza i zastępuje go znakiem \0
cin.get(tab, MAX); // wczytuje dane do nowego wiersza i wstawia go do łańcucha 

Pozdrawiam
MP

0

Dziabnąłem z rozpędu. W prawidłowym kodzie oczywiście mam zapisane

cin.get(wsk -> przedmiot, 50)

Próbowałem też z

cin.getline(wsk -> przedmiot, 50)

ale wtedy program pomija cały fragment odpowiedzialny za pobranie od użytkownika danych i zapisania ich do przedmiot
Ale nie pomija fragmentu

cin >> wsk -> waga;

tak jak przy cin.get

1

Być może pobierasz na przemian liczby i napisy. Jak przed getline masz instrukcje pobrania liczby (cin >> liczba) to w strumieniu wejściowym pozostaje znak nowego wiersza. Gdy potem wpisujesz getline, ona przechwytuje go i wpisuje do tablicy sam znak \0.

Pozdrawiam
MP

1

W takim wypadku powinieneś użyć:

(cin >> liczba).get();
cin.getline(tab, 50); 
0

Kurczę, masz rację. Wstawiłem

cin.get();

przed pobraniem tekstu i wszystko działa. Dzięki za pomoc.

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