Wyświetlanie znaku o numerze 219 (znak bloku)

0

Witam.
Kompilator to dev c++ , system Windows 10.
Mam problem z wyświetleniem jedengo konkretnego znaku o numerze 219.
Program jest banalnie prosty, tworzy tablicę imion, wyświetla ramkę, wypełnia jej wnętrze zawartością tablicy, i w zależności od przyciśniętego klawisza strzałki w górę lub w dół przesuwa kursor i podświetla dany element.
Na początku programu kiedy wyświetlam w pętli znaki ascii o numerach od 0 do 255 wyświetla się tak jak powinien, problem pojawia się zapewne po użyciu funkcji SetConsoleTextAttribute(). Zamiast znaku o numerze kodu 219 pojawiają się jakieś niebieskie cienkie pionowe linie po prawej stronie końca łancucha znaków(tych o numerze 219) czasem czerwone po lewej stronie stronie tam gdzie łańcuch powinien się zaczynać.
Problematyczną wydaje się funkcja "rysuj_kursor()".
Jeśli ktoś by coś mógł doradzić byłbym wdzięczny.

Kod to:

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <iostream>

using namespace std;
char tab[10][30];  // tablica imion
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); // Uchwyt do konsoli


// funkcja przenosząca kursor do nowego miejsca
void gotoxy(short x, short y) {COORD pos = {x, y};
							   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}

// funkcja ukrywająca kursor
void hidecursor(){   
					HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
   					CONSOLE_CURSOR_INFO info;  
    				info.dwSize = 100;  
	 				info.bVisible = FALSE;
	    			SetConsoleCursorInfo(consoleHandle, &info);}

void rysuj_kursor(int pozycja){
					SetConsoleOutputCP(850);
					SetConsoleTextAttribute(console, 0x07);
					int poz=2;

					for(int i=0;i<9;i++){
					gotoxy(2,poz+i);
					printf("%s",tab[i]);}	
					
					gotoxy(2,pozycja+2);
					SetConsoleTextAttribute(console, 0x70);

					// PROBLEMATYCZNY FRAGMENT !!!!!
					// NIE WYPISUJE ZNAKU BLOKU (219) TYLKO RYSUJE JAKĄŚ NIEBIESKĄ LINIĘ PIONOWO
					for(int u=2;u<18;u++){
					gotoxy(u,pozycja+2);	
					printf("%c",219);	
					//cout<<(unsigned char)219; też nie działa
					}
				
					//  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					gotoxy(2,pozycja+2);
					printf("%s",tab[pozycja]);}	

void rysuj_ramke(){

					
					short start_x,start_y;
					start_x=1;start_y=8;
					// gorna pozioma 
					gotoxy(start_x,1);printf("%c",201);gotoxy(25,1);printf("%c",187);
					for(int i=0;i<24;i++){gotoxy(i+start_x,1);printf("%c",205);}
					gotoxy(start_x,1);
					printf("%c",201);
					// dolna pozioma  
					gotoxy(start_x,1+10);
					printf("%c",200);
					gotoxy(25,1+10);
					printf("%c",188);
					for(int i=0;i<24;i++){gotoxy(i+start_x,1+10);printf("%c",205);}
					gotoxy(start_x,1+10);
					printf("%c",200);

					for(int i=1;i<10;i++){gotoxy(start_x,i+1);printf("%c",186);gotoxy(start_x+24,i+1);printf("%c",186);}}


 	
void przygotuj_tablice(){strcpy(tab[0],"Zygmunt");
						 strcpy(tab[1],"Stefan");
						 strcpy(tab[2],"Robert");
						 strcpy(tab[3],"Maciej");
						 strcpy(tab[4],"Andrzej");
						 strcpy(tab[5],"Jozef");
						 strcpy(tab[6],"Stanislaw");
						 strcpy(tab[7],"Grzegorz");
						 strcpy(tab[8],"Tomasz");}


int main()
{

hidecursor();

char z;
int pozyc=0;


przygotuj_tablice();	
rysuj_ramke();
rysuj_kursor(0);

do{
	z=getch();
	
	if(z!=27){

		if(z==80 && pozyc<8){pozyc++;rysuj_kursor(pozyc);}
		if(z==72 && pozyc>0){pozyc--;rysuj_kursor(pozyc);}}
	
}while(z!=27);

return 0;
}

Na załączonym zdjęciu widać te czerwone pionowe kreski tam gdzie powinien być wyświetlany początek łańcucha znaków i niebieskie na jego końcu.problem.jpg

0
printf("%c",219);

Nie prościej putchar (201)? Zasadniczy problem leży natomiast w stronie kodowej - ustaw stronę 852 zamiast 850.

0

Używasz na zmianę funkcji z Turbo C (gotoxy) oraz WinAPI, jest więc szansa, że gdzieś niejawnie ustawiasz złą stronę kodową. Ustaw 852 bezpośrednio przed wyświetlaniem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.