Problem z wydrugiem zawartości tablicy wskaźnikow
Ostatnio zmodyfikowano 2008-12-08 13:18
Mapet Temat założony przez niniejszego użytkownika |
Problem z wydrugiem zawartości tablicy wskaźnikow » 2008-12-06 17:14:21 Chciałem zapoznać sie z biblioteką console.ddt i fajny przykład dał Piotr z wykorzystaniem jej w lekcji "struktury danych". Starałem sie napisać krótki kod który by pokazywał 15 wyrazów, a jeden z nich byłby zaznaczony a po naciśnięciu strzałki w górę zmieniałby pozycje, czyli coś na wzór funkcji która sie znajduje w przykładzie wczesniej wspomnianej przeze mnie lekcji. #include <cstdlib> #include <iostream> #include <conio.h> #include "console.ddt"
using namespace std; using namespace ddt::console;
void Lista( int & pozycja, char * Tablica[] );
int main( int argc, char * argv[] ) { char * Tablica[] = { "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama", "mama" }; char znak = 0; int pozycja = 6; bool koniec = false; while( koniec == false ) { textbackground( 0 ); textcolor( 15 ); clrscr(); Lista( pozycja, Tablica ); znak = getch(); if( znak == 27 ) koniec = true; if( znak == 82 ) pozycja++; znak = 0; } system( "PAUSE" ); return EXIT_SUCCESS; }
void Lista( int & pozycja, char * Tablica[] ) { if( pozycja > 15 ) pozycja = 0; if( pozycja < 0 ) pozycja = 15; for( int i = 0; i < 15; i++ ) { if( i == pozycja ) { textbackground( 10 ); textcolor( 0 ); } else { textbackground( 0 ); textcolor( 15 ); } cout << Tablica[ i ] << endl; } cout << "test" << endl; }
Niestety wyrazy zostaja wydrukowane poprawnie (włącznie z zaznaczonym elementem) tylko za pierwszym razem. Gdy funkcja wywołana zostaje 2 raz to już nie drukuje ich. Gdy tablice wskaźników zamienie na normalne tablice które beda zawierać jeden znak to jest ok. Nie wiem dlaczego linijki też mi nie chce wydrukować gdy mam tablice wskaźników. Z góry dziękuje za pomoc. |
|
DejaVu |
» 2008-12-06 20:40:51 Zaraz sprawdzę, tylko ściągnę i zainstaluję środowisko. Tak z tego co napisałeś myślę, że linijkę: void Lista( int & pozycja, char * Tablica[] ) zamieniłbym na void Lista( int & pozycja, char ** Tablica ) i sprawdził efekty. Jednak skoro dałeś kod to zaraz go sprawdzę i powiem jak naprawić to w 100%. /edit: Sprawa pierwsza: for( int i = 0; i < 15; i++ ) Kod wewnątrz tej pętli wykona się 15 razy, tymczasem Twoja tablica posiada 14 elementów. Sprawa druga: if( znak == 82 ) pozycja++;
Co to za kod znaku 82? Jeśli chcesz mieć strzałkę w dół powinien to być inny numer (80). Kod, który wkleiłeś mi działa po dodaniu 15'go elementu do tablicy i zmianie wartości 82 na 80. |
|
Mapet Temat założony przez niniejszego użytkownika |
» 2008-12-08 13:18:38 Wielkie dzięki za odpowiedz, już nie powiem ile nad tym siedziałem, a jeśli chodzi o ten numer 82 to wstawiłem go, ponieważ nie pamiętałem jaki kod ma strzałka w górę, pozatym nie miało dla mnie to żądnego znaczenia ponieważ ten program miał pozwolić mi zrozumieć tą cześć kodu. |
|
« 1 » |