Wczytywanie ciągu znaków do struktury.
Ostatnio zmodyfikowano 2017-09-07 20:41
karambaHZP |
» 2017-09-06 12:40:18 Wrzuć kod na forum. |
|
SzymSzym Temat założony przez niniejszego użytkownika |
» 2017-09-07 19:16:47 #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. |
|
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 |
|
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. |
|
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.
|
|
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 #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 |
|
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. |
|
1 « 2 » |