• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Struktury, Tablice, DANE

Object Storage Arubacloud
0 głosów
456 wizyt
pytanie zadane 11 września 2020 w C i C++ przez Kytrap Początkujący (390 p.)
Witam, mam mały problem z tym kodem, a zacznę od tego jak to zauważyłem: Wpisując w pole ADRES po spacji np "Andrzeja Nowaka 6a" kod przesuwa się od razu do rubryki wpisywania nazwiska:2 traktując słowa Nowaka jako numer telefonu ( wiem że można to zrobić w int ale jak robiłem wszystko w string to wszystko w string ), a 6a jako imię następnego klienta. czy jest jakaś możliwość zrobienia tego tak by przypisywał całe zdanie do jednej rubryki ? lub wymusić że nie można stawiać nazw po SPACJI tylko wymusić np: Andrzeja_Nowaka_6a ?

#include <iostream>
#include <string>
using namespace std;

struct informacje_o_osobie
{
    string imie;
    string nazwisko;
    string adres;
    string nr_tele;
};
int main()
{
    informacje_o_osobie osoba[5];
    for (int i = 0; i < 5 ;i++)
    {
        cout<< "podaj imie:" << i << '\n';
        cin >> osoba[i].imie;
        cout << "podaj nazwisko:" << i << '\n';
        cin >> osoba[i].nazwisko;
        cout << "podaj adres:" << i << '\n';
        cin >> osoba[i].adres;
        cout << "podaj nr.tele" << i << '\n';
        cin >> osoba[i].nr_tele;
    }
    for (int i = 0; i < 5  ;i++)
    {
        cout<<"dane klineta:" << '\n';
        cout<< "imie" <<osoba[i].imie << '\n';
        cout<< "nazwisko" << osoba[i].nazwisko << '\n';
        cout<< "adres" << osoba[i].adres << '\n';
        cout<< "nr telefonu" << osoba[i].nr_tele << '\n';
    }
    return 0;
}

2 odpowiedzi

+1 głos
odpowiedź 11 września 2020 przez j23 Mędrzec (194,920 p.)
std::getline(std::cin, osoba[i].adres);

 

+1 głos
odpowiedź 12 września 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
Tak jak już tutaj ktoś napisał rozwiązanie, tak ja postaram się wytłumaczyć skąd się bierze problem.
Otóż obiekt cin pobiera dane, ale do pierwszego napotkanego białego znaku, którym jest spacja. Po natrafieniu na spację przerywa pobieranie, więc dane zostają zapisane do Twojej zmiennej. Jednakże w buforze wejścia zostają dane, które nie zostały przetworzone - to jest nigdzie nie zostały zapisane - więc przy następnym wywołaniu cin >> zmienna; zostaje pobrane następne słowo, które zostało w buforze i od razu jest ono zapisywane do zmiennej.

Rozwiązaniem jest skorzystanie z tego, co zostało już napisane w odpowiedzi, jako parametry podajesz cin, a następnie zmienną typu string.
komentarz 12 września 2020 przez j23 Mędrzec (194,920 p.)

Otóż obiekt cin pobiera dane, ale do pierwszego napotkanego białego znaku

Doprecyzujmy: nie std::cin, a operator wejścia >>.

komentarz 12 września 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
Okej, dziękuję za komentarz oraz poprawę :) Dopiero od niedawna uczę się programować w C++, więc jeszcze trochę mylę się w terminologii.

Podobne pytania

0 głosów
1 odpowiedź 1,059 wizyt
pytanie zadane 25 października 2020 w C i C++ przez hicodyn Początkujący (420 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez pozdro600 Początkujący (260 p.)
0 głosów
0 odpowiedzi 339 wizyt
pytanie zadane 5 maja 2020 w C i C++ przez Atman Użytkownik (810 p.)

92,698 zapytań

141,611 odpowiedzi

320,122 komentarzy

62,057 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...