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

Problem z wydrugiem zawartości tablicy wskaźnikow

Ostatnio zmodyfikowano 2008-12-08 13:18
Autor Wiadomość
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.

C/C++
#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 

C/C++
cout << "test" << endl;
 
też mi nie chce wydrukować gdy mam tablice wskaźników. Z góry dziękuje za pomoc.
P-2696
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:
C/C++
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.
P-2697
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.
P-2710
« 1 »
  Strona 1 z 1