Dynamiczna struktura danych, program przerywa działanie

Dynamiczna struktura danych, program przerywa działanie
PO
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
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

Kopiuj
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;

Kopiuj

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

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

Kopiuj
cin.get(wsk -> przedmiot, 50);
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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

PO
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
cin.get(wsk -> przedmiot, 50)

Próbowałem też z

Kopiuj
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

Kopiuj
cin >> wsk -> waga;

tak jak przy cin.get

Kopiuj
  • Rejestracja: dni
  • Ostatnio: dni
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

  • Rejestracja: dni
  • Ostatnio: dni
1

W takim wypadku powinieneś użyć:

Kopiuj
(cin >> liczba).get();
cin.getline(tab, 50); 
PO
  • Rejestracja: dni
  • Ostatnio: dni
0

Kurczę, masz rację. Wstawiłem

Kopiuj
cin.get();

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.