Wczytanie stringa do tablicy


(Bartolini234) #1

Cześć, mam pewien problem z moim programem(mała baza danych). Teoretycznie jest on napisany i działa, ale dość łatwo go przeciążyć...winne jest to:

struct sprzet
 {
    int id;
    char nazwa[256];
    char producent[50];    
    string kategoria;
    int dostepne_sztuki;
    double cena_za_dzien;
    string data_dostepnosci;
};


  cout "Nazwa sprzetu: \n";    
  cin sprzetTab[i].nazwa; //tak wygląda wczytanie pierwszej tablicy, następna podobnie

Chodzi rzecz jasna o tablice znaków, które nie zaakceptują czegoś w rodzaju "a b", ale co najwyżej "a_b" - inaczej sypie się reszta. Wiem, że gdyby to były stringi, byłoby łatwiej - więc to zamieniłem:

struct sprzet
 {
    int id;
    string nazwa[256];
    string producent[50];    
    string kategoria;
    int dostepne_sztuki;
    double cena_za_dzien;
    string data_dostepnosci;
};

Problem pojawia się, ponieważ nie cinsprzetTab_.nazwa; nie działa - kolega doradził mi  użycie getline i mam:_

cout "Nazwa sprzetu: \n";    
 getline (cin, sprzetTab[i].nazwa);

które nie działa. Wszelkie moje próby dopasowania tego nie działają, dalej w tym punkcie kompilator wyrzuca błąd.


(Rolek0) #2

Chciałeś mieć 256 znaków, a masz tablicę 256 stringów :wink:

getline zadziała, jeśli dasz mu pojedynczy string, a nie tablicę stringów.

PS. Polecam:


(Bartolini234) #3

Ustalmy coś. Mam do zrobienia program, tu jego specyfikacja częściowa

sprzęt budowlany Zadanie polega na zaprojektowaniu oraz implementacji oprogramowania do zarządzania wypożyczalnią sprzętu budowlanego. Każdy produkt charakteryzowany jest następującym rekordem danych:
 • nazwa - tablica znaków o maksymalnej długości 256 znaków

Mam to zrobione na char, ale może to działać niestabilnie(program nie jest “głupotoodporny”), dlatego chciałem zmienić to na string(ale o maksymalnej długości 256, tak jak w poleceniu). Czy jest na to szybka opcja? Jeżeli zmieniając char na string, usuwam też rozmiar tamtej tablicy to wszystko działa, ale nie ma tego ograniczenia, które uważam jest ważne.


(Ryan) #4

Serio, poczytaj jakąś książkę, albo tutorial. Bo string[256] to tablica 256 stringów, tak jak int[256] to tablica 256 intów a char[256] to tablica 256 charów. Skąd pomysł, że string[256] to string o maksymalnej długości 256 znaków? Ale to tylko składowanie danych, skupmy się na odczycie.

Jak wyobrażasz sobie działanie kodu, który pozwala na wczytanie tylko 256 znaków funkcją, która nie przyjmuje jako parametru maksymalnej długości? W sumie to powinienem spytać: widzisz różnicę między funkcją getline a metodą getline klasy strumieniowej? Podpowiem: powinieneś widzieć. Gdyby kolega powiedział Ci “dojedź do mnie autobusem”, to zastanowiłbyś się “którym?”, ale tutaj wyraźnie nie poświęciłeś uwagi “użyj getline”.

Sporą składową programowania są umiejętność czytania dokumentacji i eksperymentowanie. Pisanie na forum “to są wymagania, jak to zrobić?” to nie jest programowanie.


(Bartolini234) #5

Tyle to ja wiem, dlatego szukam sposobu na ograniczenie rozmiaru stringa do 256 znaków.  Użycie getline doradził właśnie kolega, wg schematu getline(cin, tab nazwa); ponieważ nie jestem biegły w C++ próbowałem dopasować kod do tego schematu na kilka różnych sposobów…czyli eksperymenty były. Zanim ogarnę różnice między getline a tą metodą klasy strumieniowej minie sporo czasu, a ja potrzebuję tylko jednej prostej(tak myślę) zmiany w kodzie.