Wpis z mikrobloga

Witam panowie i panie #programista15k
Mam zagwozdkę. Uczę się klas i metod. Stworzyłem taki o to programik do przechowywania informacji o plakacie. Problem jest taki, że gdy używam dwóch tablic char'owych to program ich w ogóle nie czyta. Nie wiem za bardzo co z tym zrobić.
Próbowałem pobrać tekst przez gets(), to nie działa. Później próbowałem przez for(...), co ciekawe jeden z dwóch się wyświetlał razem z dziwnymi znakami. Co mogę zrobić, żeby program czytał normalnie tekst do tablic charowych, a potem je normalnie wyświetlał.

Kod programu tutaj: Kod

A wynik w załączniku.


#c #cplusplus #programowanie #programowanieobiektowe #programowanieboners (xd) #kiciochpyta
p.....h - Witam panowie i panie #programista15k
Mam zagwozdkę. Uczę się klas i metod...

źródło: comment_jGJTri9cDaekHeVtMwSLeknLwAbp8UKX.jpg

Pobierz
  • 29
@pyth nie wiem co autor miał na myśli, ale masz jeden obiekt na którym operujesz, swoja drogą nie lepiej wykorzystać string zamiast tablicy char?

problem tkwi w tym, że nie masz nic zapisane w tych tablicach rodzaj i kategoria?
@mojemirabelki: Tak, problem w tym, że:
1. Na screenie widać, że nie mogę nic wpisać w kategorię.
2. W rodzaj papieru mogę wpisać, lecz nic nie wyświetla się. Tylko nazwa (pierwsza tablica charowa), ilość sztuk i cena.

Co zrobić, żebym mógł wpisać tekst, który się zapisze w tym jednym obiekcie i go potem wyświetli?
@pyth: no to jeszcze kilka uwag jak chcesz pisać (bardziej) "nowocześnie":

nazwy zmiennych, symboli itd nie powinno się pisać po polsku
#include => #include
#include => #include
conio.h pewnie narzucone, więc nie skomentuje ( ͡° ͜ʖ ͡°)
#define L 10 => do definiowania stałych w c++ jest const/constexpr
strcpy(nazwa, naz); to jest niebezpieczne, moze przepelnic bufor, zamień na strncpy albo snprintf albo najlpeiej użyj std::string zamiast alokować
@leoha: Dzięki za rady! Co do bibliotek nie ukrywam, że opieram się na programie, na którym działaliśmy na zajęciach. Co do wszystkiego to wezmę sobie do serca. Czyli uważasz, że:

zamień na strncpy albo snprintf albo najlpeiej użyj std::string zamiast alokować recznie bufor char*

... załatwi sprawę?
@pyth: Pozwolę sobie przyczepić się do twojego kodu, gdzie się tylko da :P

1. Korzystasz w swoim programie z biblioteki conio, która jest tylko na windowsie, unikaj jej.
2. Piszesz w C++, dlatego też staraj się używać std::string zamiast tablicy charów. Tak samo staraj się unikać funkcji IO z C i staraj się używać strumieni - tak jak używasz std::cout do wpisywania, możesz używać std::cin i std::getline do wczytywania danych. Mieszasz
@Noct: @leoha: @MamCieNaHita: @mojemirabelki: @trojanxem:
Dobra panowie, zrobiłem to na stringach i wszystko chula jak talala. Felerem okazał się ten gets najwyraźniej. Może awansuję na #programista2k xd
Zastosuje się do Waszych rad i jeszcze raz przerobie kod programu, tak żeby wyglądał znośnie, bardziej "nowocześnie".
Mogę wołać gdy już skończę o kolejne rady?

Mam jeszcze parę pytań:
@MamCieNaHita: Co jest złego w "using namespace std;". Nie trzeba
Co jest takiego złego w define?


@pyth: define nie ma typu. Wkleja wartość na chamca. const/constexpr ma typ.

Co jest złego w "using namespace std;".


@pyth: Robi się zły nawyk. Raz wrzucisz using namespace do headera, to "zatruje" ci wszystkie pliki, gdzie załączysz ten header. W pliku .cpp można używać z głową.
@pyth: to raczej nie następny krok a całkowita zmiana podejścia. Rozpisz sobie na kartce co chcesz osiągnąć, a potem pisz, inaczej dużo rzeczy robi się niepotrzebnie
@MamCieNaHita: #define jest jak najbardziej dobrym nawykiem, gdyż jest preprocesorem, i kompilator przed kompilowaniem podmienia nazwy na wartości, więc warto tego używac, może to nie jest dobry przykład użycia, ale mówienie że const jest lepszy niż define to moim zdaniem duże nadużycie, gdyż wszystko zależy do czego używamy :)
@pyth wołaj kiedy tylko mogę Ci pomóc :)