[C++] [SOLVED] getch() - wczytuje śmieci
-
- Piegowaty Guziec
- Posty: 5
- Rejestracja: 14 wrz 2010, 17:00
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.04
- Środowisko graficzne: GNOME
- Architektura: x86
[C++] [SOLVED] getch() - wczytuje śmieci
Witam, więc mój problem polega na tym że gdy wczytuje sobie za pomocą getch() do stringa to przy jego wypisaniu pojawiają mi się w nim dodatkowe znaki np. ^V, ^R itp.
Podejrzewam że jest tutaj coś nie tak z odczytywaniem niektórych znaków ale nie mam pojęcia jak temu zaradzić.
Przy inicjalizacji ncurses próbowałem właściwie wszystkich już kombinacji trybu wyświetlanie ale nie dało to żadnych efektów. Muszę dostawać w tym stringu czysty tekst pobrany od użytkownika bo wykorzystuję go później jakos nazwe pliku który otwieram no i przez te znaki mi wszystko sie sypie.
Ktoś ma jakiś pomysł ?
Podejrzewam że jest tutaj coś nie tak z odczytywaniem niektórych znaków ale nie mam pojęcia jak temu zaradzić.
Przy inicjalizacji ncurses próbowałem właściwie wszystkich już kombinacji trybu wyświetlanie ale nie dało to żadnych efektów. Muszę dostawać w tym stringu czysty tekst pobrany od użytkownika bo wykorzystuję go później jakos nazwe pliku który otwieram no i przez te znaki mi wszystko sie sypie.
Ktoś ma jakiś pomysł ?
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Odp: [C++] getch() - problem z odpowiednim wczytywaniem
Rzuć kawałkiem kodu, bo dyżurna wróżka ma akurat urlopfalik pisze:Ktoś ma jakiś pomysł ?

Кто жопой родился, чижиком не помрёт
-
- Piegowaty Guziec
- Posty: 5
- Rejestracja: 14 wrz 2010, 17:00
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.04
- Środowisko graficzne: GNOME
- Architektura: x86
Odp: [C++] getch() - wczytuje śmieci
Kod: Zaznacz cały
// to jest funkcja pobierajaca stringa od uzytkownika
std::string read_filename()
{
clear();
mvprintw(5,5,"Wpisz nazwe pliku:\n");
refresh();
std::string tab;
std::string::iterator it;
it=tab.begin();
char z=getch();
int i=0;
while(z!='\n')
{
*(it+i)=z;
z=getch();
i++;
}
return tab;
}
// tutaj wrzucam to do vectora
buffer.push_back(read_filename());
// a tu wyswietlam ( wiem ze tylko pierwszy el. ale nie zrobilem jeszcze petli, to tylko dla sprawdzenia czy dobrze zapisywane mam dane
void print()
{
clear();
bit=buffer.begin();
std::string d1 = *(bit);
mvprintw(2,2,d1.c_str());
refresh();
}
- dawwin
- Serdeczny Borsuk
- Posty: 202
- Rejestracja: 18 kwie 2009, 09:16
- Płeć: Mężczyzna
- Wersja Ubuntu: 11.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [C++] getch() - wczytuje śmieci
Kod: Zaznacz cały
*(it+i)=z;
Powinno być po prostu
Kod: Zaznacz cały
tab += z;
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Nie pomagam na PW
-
- Piegowaty Guziec
- Posty: 5
- Rejestracja: 14 wrz 2010, 17:00
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.04
- Środowisko graficzne: GNOME
- Architektura: x86
Odp: [C++] getch() - wczytuje śmieci
Dzięki dzięki. Tak się składa, że udało mi się samemu dojść już do tego. Tylko nie rozumiem jeszcze do końca dlaczego iterator działa w pewnym sensie bo mimo wszystko wpisuje mi znaki do stringa tylko na końsu jakby dodaje jeszcze element ze śmieciem
- dawwin
- Serdeczny Borsuk
- Posty: 202
- Rejestracja: 18 kwie 2009, 09:16
- Płeć: Mężczyzna
- Wersja Ubuntu: 11.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [C++] getch() - wczytuje śmieci
String realokuje sobie pamięć na znaki, kiedy używasz któregoś z operatorów przypisania lub jakiejś metody (funkcji) tej klasy. Używając iteratora masz dostęp do zaalokowanych już znaków, ale nie możesz zmienić rozmiaru ciągu. Więc jeśli masz w stringu 10 znaków to te 10 możesz nadpisać. Ciąg znaków w pamięci kończy się znakiem '\0', gdyż klasa string przechowuje w tablicy ciąg typu char (Jeśli pisałeś kiedyś w C to powinieneś to wiedzieć). Ty używając iteratora możesz zamazać znak końca i wtedy na końcu pojawiają się śmieci
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Nie pomagam na PW
-
- Piegowaty Guziec
- Posty: 5
- Rejestracja: 14 wrz 2010, 17:00
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.04
- Środowisko graficzne: GNOME
- Architektura: x86
Odp: [C++] getch() - wczytuje śmieci
Ok rozumiem już, dzięki za wytłumaczenie. Dopiero zagłębiam się w stringi i vectory także sporo błędów mi wyskakuje, których nie rozumiem. Myślę, że teraz już wiem o co chodzi.
Temat chyba do zamknięcia. SOLVED
Temat chyba do zamknięcia. SOLVED
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości