cin.get( , ) odniesione do struktury

0

Witam, to mój kod:

#include <iostream>

const int MAX = 20;

struct chaff
{
	char imie[MAX];
	int liczba;
};

void przypisz(chaff *, int);
void odczytaj(chaff *, int);


int main(void)
{
	int ile;
	std::cout << "Podaj ile osob wczytac: ";
	std::cin >> ile;

	chaff *st = new chaff[ile];

	przypisz(st, ile);

	odczytaj(st, ile);

	std::cin.get();
	std::cin.get();
	delete[] st;

	return 0;
}


void przypisz(chaff *c, int ile)
{
	for (int i=0; i<ile; i++)
	{
		std::cout << "Podaj Imie: ";
		std::cin >> c[i].imie;         // std::cin.get(_______,MAX);
		std::cout << "Ile: ";
		std::cin >> c[i].liczba;
	}
	std::cout << "\n\n\n";
}


void odczytaj(chaff *c, int ile)
{
	std::cout << "Wczytane dane to: \n";
	for (int i = 0; i<ile; i++)
	{
		std::cout<<i+1<< ". "<< "Imie: " << c[i].imie << ", ile: " << c[i].liczba << "\n";
	}
}

Zastanawiam się jak w funkcji przypisz mogę zamienić

std::cin >> c[i].imie;

na

std::cin.get(_______,MAX);

Próbowałem wpisać to co mi intuicja podpowiada, ale żaden z moich kodów nie odniósł sukcesu. Proszę o podpowiedź :).

0

Użyj cin.getline()
Pokaż co dokładnie wpisywałeś.

Dlaczego używasz char* zamiast std::string?

0
std::cin.getline(c[i].imie, MAX); 

Nie wczytuje imienia tylko przeskakuje dalej do ile, char w formie ćwiczeń używam.
Próbowałem podstawowego cin.get(c[i].imie, MAX), potem z * , zmieniałem też w strukturze na char * i tym podobne.

0

Bo pobieranie danych opratorem >> i mieszanie z metodami get i getline jest ryzykowne i trzeba wiedzieć co się robi.
>> pozostawia w buforze strumienia znak nowej linii i metoda get kończy działanie po pobraniu tego znaku.
W rezultacie masz pusty łańcuch.

(std::cin >> ile).get();
0

Dzięki wielkie za wskazówki i pomoc. Zmiana cin>>ile; na (std::cin >> ile).get(); oraz dodanie ```
std::cin.get();

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