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

Struktura i pobieranie nazwy do string'a

Ostatnio zmodyfikowano 2012-02-20 18:42
Autor Wiadomość
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:
C/C++
#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;
   
}
P-50918
xevuel
» 2012-02-18 12:36:41
getline tego nie zrobisz, musisz pobrać do chara i przypisać do std::string.
P-50919
bingo009
Temat założony przez niniejszego użytkownika
» 2012-02-18 12:39:46
Dobra, a jak to potem przekonwertować?
P-50920
xevuel
» 2012-02-18 12:46:39
C/C++
char abc[ 20 ];
cin >> abc;
std::string napis = abc;
P-50921
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:
C/C++
#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;
    //Tu zaczyna sie problem
    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.
P-50924
xevuel
» 2012-02-18 13:09:56

C/C++
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.
P-50927
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?

C/C++
char abc[ 20 ];
cin >> abc;
std::string napis = abc;
fajny buffer overflow ;p
P-50935
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.
P-50936
« 1 » 2
  Strona 1 z 2 Następna strona