Wprowadzanie łańcuchów znakowych

Wprowadzanie łańcuchów znakowych
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Chciałem zapytać Was, bardziej doświadczonych osób, które stykają się z kodami pisanymi przez inne osoby np w pracy/na forum.
Który z poniżej zaprezentowanych sposobów wprowadzania danych przez obiekt cin jest najsensowniejszy/najbardziej 'estetyczny'?
Chciałbym wyrobić sobie dobre nawyki od sameog poczatku, żeby potem nie mieć z tym problemu.

Kopiuj


cout<<"Ile wplat odnotowano? ";
int ArSize;
(cin>>ArSize).get();

lub

Kopiuj
cout<<"Ile wplat odnotowano?";
int ArSize;
cin>>ArSize;
 cin.get();

lub

Kopiuj
 cout<<"Nazwa naszego darczyncy: ";
    getline(cin, Tab[i].name);

Chodzi mi przede wszystkim o poradzenie sobie z takim problemem:
Załóżmy ,że zrobie tak ( przy czym nazwa naszego darczyncy bedzie dwuczłonowe)

Kopiuj
cout<<"Nazwa naszego darczyncy: ";
cin>>Tab[i].imie;
cout<<"Kwota jaka wplacil: ";
cin>>Tab[i].kwota;

Chodzi mi również o ogólne wprowadzanie tego typu danych w pętlach.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

getline i operator>> mają zupełnie różną semantykę.

  1. wersja z get() jest błędna, po prostu nie ma sensu. Szczególnie dziwna jest ta z wywołaniem .get() na wyniku operatora >>.
  2. cin>>Tab[i].imie; dla stringów wczyta tylko jedno słowo
  3. getline(cin, Tab[i].name); wczyta całą linię.
    Zdecyduj się co chcesz robić i rób to, ale często mieszanie wczytywania znaków i całych linii nie prowadzi do niczego dobrego.

A jeśli get() stosujesz, aby zatrzymać konsolę: zmień IDE.

YooSy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 472
0

@kq: Ten get() pewnie ma za zadanie pozbyć się \n z bufora przed użyciem getline().
@wld1337 Co do wczytywania liczb zapoznaj się z Zabezpieczenie przed wpisywaniem liter

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.