Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytywanie ciągu znaków do struktury.

Ostatnio zmodyfikowano 2017-09-07 20:41
Autor Wiadomość
karambaHZP
» 2017-09-06 12:40:18
Wrzuć kod na forum.
P-164634
SzymSzym
Temat założony przez niniejszego użytkownika
» 2017-09-07 19:16:47
C/C++
#include <iostream>
#include <string>
using namespace std;

int main()
{
    struct car
    {
        string marka;
        int rok;
    };
    int ilosc;
    cout << "Ile samochodow chcesz skatalogowac? ";
    cin >> ilosc;
    car * auta = new car[ ilosc ];
    for( int i = 0; i < ilosc; i++ )
    {
        cout << "Podaj marke: ";
        getline( cin, auta[ i ].marka );
        cout << "Podaj rok produkcji: ";
        cin >> auta[ i ].rok;
    }
    for( int i = 0; i < ilosc; i++ )
    {
        cout << auta[ i ].rok << " " << auta[ i ].marka << endl;
    }
    delete[] auta;
    return 0;
}
Na przykład. Program znów nie chce wczytać zmiennej "auta(i).marka" (nie mogę wpisać nawiasów kwadratowych bo mi traktuje jako znacznik) - wyświetla komunikat i od razu przechodzi do roku.
P-164671
Luq
» 2017-09-07 19:24:11
cin >> ilosc;

Po wczytaniu operatorem >> w buforze pozostaje znak nowej linii, na który dalej trafia getline. Wystarczy, że dodasz np.
cin.ignore( 1 )
 przed getlinem
P-164676
karambaHZP
» 2017-09-07 19:25:20
Operator
>>
 pozostawia w buforze strumienia znak końca linii, na które reaguje
std::getline
.
W tej sytuacji musisz pozbywać się tego znaku po pobraniu od użytkownika liczby.
P-164677
mateczek
» 2017-09-07 19:47:10
Wrzuciłeś kod, z którym masz problem i po 9 minutach masz wyjaśnienie z rozwiązaniem.
Sam widzisz że Teksty w stylu "nie jest to (raczej) wina błędu w kodzie" do niczego nie prowadzą. Bo jak coś się kompiluje i nie działa to zawsze jest to wina jakiegoś błędu w kodzie. A błąd w kodzie bez kodu trudno wskazać(takie rzeczy tylko wróżbita Maciej :P)

Jeśli chcesz samodzielnie szukać błędów zainteresuj się debuggerem (zapewne ikonka robaka w twoim IDE)Debugowanie pozwala Ci wykonać program w pracy krokowej i analizować wyniki każdego kroku. Jest to prosta czynność a niesamowicie ułatwia szukanie błędów wykonania i logicznych.
P-164683
karambaHZP
» 2017-09-07 20:05:58
Wystarczy, że dodasz np.
cin.ignore( 1 )
 przed getlinem
Raczej po pobraniu liczby, bo przed pierwszym pobieraniem tekstu trzeba będzie obwarować to ifem,
lub dopadnie pierwszy znak
C/C++
#include <iostream>
#include <string>

int main()
{
    std::string str;
    std::cin.ignore( 1 );
    std::getline( std::cin, str );
    std::cout << str << std::endl;
}
asdf
sdf
P-164688
SzymSzym
Temat założony przez niniejszego użytkownika
» 2017-09-07 20:41:03
Chyba faktycznie nie powinienem zakładać, że jak kod jest prosty i nie widać w nim żadnego błędu to znaczy, że jest bezbłędny. Cóż, dzięki za odpowiedzi.
P-164696
1 « 2 »
Poprzednia strona Strona 2 z 2