Wczytywanie łańcucha char w pętli .get()

0

Witam,
Mam problem z następującą funkcją, powinna ona zatrzymać wczytywanie kolejnych rekordów do struktury student jeżeli w polu fullname zostanie wprowadzony pusty wiersz.
Uprzedzając pytania to SLEN to stała i jest równa 30. Chciałbym się dowiedzieć dlaczego gdy dodaje drugi rekord i wprowadzając fullname naciskam enter nic nie wpisując , program wykonuje się sam do końca tzn. resztę pętli ale nie pytając mnie o nic i zwraca n (jest podawane w main i jest dowolne, może być dla przykładu 10). Dlaczego ten if nie działa ?

int getinfo(student pa[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << "Podaj imie: " << endl;
		cin.get(pa->fullname, SLEN).get();
		if(pa->fullname == "") return i;
		cout << "Podaj hobby: " << endl;
		cin.get(pa->hobby, SLEN).get();
		cout << "Podaj oop level: " << endl;
		cin >> pa->ooplevel;
		cin.get();
		pa++;
	}
	return n;
}
1
    for(int i=0;i<n;++i)
      {
       cout<<"Podaj imie: ";
       cin.getline(pa->fullname,SLEN);
       if(!*(pa->fullname)) return i;
       cout<<"Podaj hobby: ";
       cin.getline(pa->hobby,SLEN);
       cout<<"Podaj oop level: ";
       cin>>pa->ooplevel;
       while(cin.get()!='\n') {}
       ++pa;
      }
    return n;

Poczytaj o c-string'ach

0

Ok. Program działa tak jak w poleceniu z książki.
Ale chciałbym się upewnić czy dobrze rozumiem dlaczego nie działało,
a na tym tylko mi zależy bo program do niczego nie jest mi potrzebny.
Chodziło o to że porównanie pa->fullname == "" jest niepoprawne bo tak naprawdę
to porównywałem adres zamiast wartości oprócz tego pusty string to byłby NULL ?
No i get() które w przeciwieństwie do getline() nie usuwa z wejścia delimiter character ?
Na końcu pętla while żeby nie robił się get gdy nie ma '\n' na wejściu.
Czy dobrze to sobie tłumaczę ?

0

Ujdzie.

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