Dwuwymiarowa tablica string do funkcji
Ostatnio zmodyfikowano 2015-05-24 12:31
Szustarol Temat założony przez niniejszego użytkownika |
Dwuwymiarowa tablica string do funkcji » 2015-05-22 17:41:02 Witam, mam kod #include <iostream> #include <string> #include <ctime>
using namespace std;
void Fillstring( string & t[][] ) { }
int main() { string obszar[ 10 ][ 10 ]; Fillstring( obszar ); }
Niestety przy kompilacji wywala declaration of 't' as array of references nie wiem jak temu zapobiec, chcę pracować na normalnej zmiennej. |
|
pekfos |
» 2015-05-22 18:17:55 Usuń &. |
|
Monika90 |
» 2015-05-22 18:56:04 void Fillstring( string t[][ 10 ] )
|
|
Szustarol Temat założony przez niniejszego użytkownika |
» 2015-05-24 10:58:15 Witam ponownie Piszę w tym samym temacie ponieważ zagadnienie poniekąd dotyczy poprzedniego problemu mam taki kod #define ROWS 79 #define COLS 23 #ifdef _WIN32 #define CLEAR "cls" #else #define CLEAR "clear" #endif #include <iostream> #include <ctime> #include <cstdlib> #include <string>
using namespace std;
void fillchar( char obszar[][ ROWS ] ) { for( int j = 0; j < COLS; j++ ) { for( int i = 0; i < ROWS; i++ ) { obszar[ j ][ i ] = NULL; } } for( int i = 0; i < ROWS; i++ ) { obszar[ 0 ][ i ] = '='; } for( int i = 0; i < ROWS; i++ ) { obszar[ COLS - 1 ][ i ] = '='; } for( int i = 0; i < COLS; i++ ) { obszar[ i ][ 0 ] = '|'; } for( int i = 0; i < COLS; i++ ) { obszar[ i ][ ROWS - 1 ] = '|'; } obszar[ 0 ][ 0 ] = '/'; obszar[ 0 ][ ROWS - 1 ] = '\\'; obszar[ COLS - 1 ][ 0 ] = '\\'; obszar[ COLS - 1 ][ ROWS - 1 ] = '/'; }
int main() { char obszar[ COLS ][ ROWS ]; string zawartosc; fillchar( obszar ); do { for( int j = 0; j < COLS; j++ ) { for( int i = 0; i < ROWS; i++ ) { zawartosc += obszar[ j ][ i ]; } zawartosc += "\n"; } cout << zawartosc; system( CLEAR ); } while( 1 ); }
Char postanowiłem zamienić na jeden string, ponieważ wypisywanie stringu jest znacznie krótsze, co pozwala na ograniczenie migotania. Niestety, string jest wypisywany cały czas, nawet gdy jest tam czyszczenie ekranu (ekran nie jest czyszczony, a powinien). Należy nadmienić, że nie działa to tylko w przypadku wypisywania stringa t.j. cout << zawartosc; . Takie coś już np. działa cout << "a"; i nie zakłóca odświeżania ekranu. |
|
Monika90 |
» 2015-05-24 11:59:09 Czyszczenie ekranu działa, ale string zawartosc staje się coraz dłuższy, bo ciągle do niego dodajesz, a nigdy go nie czyścisz. Po wyświetleniu wywołaj zawartosc.clear();NULL to zerowy wskaźnik, a nie zerowy znak. |
|
Monika90 |
» 2015-05-24 12:31:22 postanowiłem zamienić na jeden string, ponieważ wypisywanie stringu jest znacznie krótsze, co pozwala na ograniczenie migotania.
|
Żeby uniknąć migotania powinieneś przestać czyścić ekran. Zamiast tego po prostu przenoś kursor w lewy górny róg ekranu i drukuj stringa - to będzie tzw. podwójne buforowanie. |
|
« 1 » |