bingo009 Temat założony przez niniejszego użytkownika |
Struktura i pobieranie nazwy do string'a » 2012-02-18 12:35:06 Witam was serdecznie, otóż przeglądając pewien kurs, doszedłem do rozdziału o strukturach. Aby je opanować w 100%, postanowiłem zrobić prosty program, który ma za zadanie przyjąć nazwe jakiegoś produktu, oraz jego numer seryjny. Problem polega na tym, że nie mam pojęcia, jak wczytać wpisany tekst z klawiatury do stringa. Próbowałem funkcji getline z waszego kursu, ale wywala mi: 'getline: identifier not found' Proszę o pomoc, ja dopiero 1 raz mam doczynienia ze stringem. Tu jest mój cały kod: #include <iostream>
using namespace std;
struct DANE { std::string Nazwa; int numerseryjny; };
int main() { DANE Produkt1; DANE Produkt2; cout << "Podaj nazwe, oraz numer seryjny" << endl; cout << "Nazwa: "; getline( cin, Produkt1.Nazwa ); return 0; }
|
|
xevuel |
» 2012-02-18 12:36:41 getline tego nie zrobisz, musisz pobrać do chara i przypisać do std::string. |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-02-18 12:39:46 Dobra, a jak to potem przekonwertować? |
|
xevuel |
» 2012-02-18 12:46:39 char abc[ 20 ]; cin >> abc; std::string napis = abc;
|
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-02-18 12:56:54 Dzięki wielkie. Twój sposób jest dobry, ale udało mi się zrobić aby działała też funkcja getline. I teraz mam pytanie. To mój kod: #include <iostream> #include <string>
using namespace std;
struct DANE { std::string Nazwa; int numerseryjny; };
int main() { DANE Produkt1; DANE Produkt2; cout << "Podaj nazwe, oraz numer seryjny Produkt 1" << endl; cout << "Nazwa: "; getline( cin, Produkt1.Nazwa ); cout << endl; cout << "Podaj numer seryjny produktu: "; cin >> Produkt1.numerseryjny; cout << endl; cout << "Podaj nazwe, oraz numer seryjny Produktu 2" << endl; cout << "Nazwa: "; getline( cin, Produkt2.Nazwa ); cout << endl; cout << "Podaj numer seryjny produktu: "; cin >> Produkt2.numerseryjny; cout << endl << endl << endl << endl; cout << "Produkt 1" << endl; cout << "Nazwa: " << Produkt1.Nazwa << endl; cout << "Numer seryjny: " << Produkt1.numerseryjny << endl; cout << endl << endl; cout << "Produkt 2" << endl; cout << "Nazwa: " << Produkt2.Nazwa << endl; cout << "Numer seryjny: " << Produkt2.numerseryjny << endl; return 0; }
funkcja getline działa dobrze w pierwszym przypadku, lecz w zaznaczonym miejscu, kiedy ma pobrać nazwe produktu 2, to wtedy nie wiem czemu, ale funkcja getline jest pomijana. Wyświetla mi się w konsoli nazwa, i nic nie mogę zrobić, bo odrazu przeskakuje do podania numeru seryjnego. To jest dziwne o tyle, bo za pierwszym razem getline działa jak należy, a dopiero potem wogóle nie działa. W czym rzecz? PS: Wiem, że napisałem kod jak kompletny jełop(powtórzenia endl), ale pisałem go na szybko, aby zrozumieć struktury. |
|
xevuel |
» 2012-02-18 13:09:56
int main() { DANE Produkt1; DANE Produkt2; cout << "Podaj nazwe, oraz numer seryjny Produkt 1" << endl; cout << "Nazwa: "; getline( cin, Produkt1.Nazwa );
|
Przecież to jest dokładnie ten sam kawałek co wcześniej. Więc jakim cudem ci się teraz skompilowało? Spróbuj kodu z charem, i zobacz czy dalej będzie to samo. |
|
ison |
» 2012-02-18 14:08:49 Więc jakim cudem ci się teraz skompilowało?
|
a dlaczego miałoby się nie skompilować? getline tego nie zrobisz, musisz pobrać do chara i przypisać do std::string.
|
jak nie? char abc[ 20 ]; cin >> abc; std::string napis = abc;
|
fajny buffer overflow ;p |
|
xevuel |
» 2012-02-18 14:11:05 Próbowałem funkcji getline z waszego kursu, ale wywala mi: 'getline: identifier not found'
|
Dlatego. Mi przynajmniej getline nie działało. Co do buffer overflow, to był tylko przykładowy kod. |
|
« 1 » 2 |