[Çözüldü] Yazdığım C kodunda ASCII karakterler doğru görünmüyor

Başlatan Sh4oTT, 12 Eylül 2015 - 13:06:23

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Sh4oTT

Arkadaslar soyle bir kod yazdım fakat ASCII kodlarını soru ısaretı olarak gosterıyor sebebı nedır?


//DongulerleDikdortgenCizimi

#include <stdio.h>

void dikdortgenciz (int enUzunluk, int boyUzunluk){

char karakter=0;
int i=0;
int j=0;

//Once Sol Ust Kose:

karakter=218; //KOSE
printf("%c", karakter);

//Ust Kenarları Cızelım:

karakter=196; //Yatay Cizgi

for (i=0; i<enUzunluk-2; i++){
printf("%c", karakter);
}

//Sag Ust Kose:

karakter=191; //KOSE
printf("%c", karakter);
printf("\n");


//Govde Kismi:

//Sol Yan Cizgiler:

for (i=0; i<boyUzunluk-2; i++){
karakter=179; //Dikey Cizgi
printf("%c", karakter);

for (j=0; j<enUzunluk-2; j++){
karakter=32; //Bosluk karakteri
printf("%c", karakter);
}
karakter=179; //Dikey Cizgi
printf("%c", karakter); //Sag Yandaki Cizgiler
printf("\n");
}

//Sol Alt Kose:

karakter=192;
printf("%c", karakter);

//Alt Kenarlar:

karakter=196; //Yatay Cizgi

for(i=0; i<enUzunluk-2; i++){
printf("%c", karakter);
}

//Sag Alt Kose:

karakter=217; //KOSE
printf("%c", karakter);


}



int main(){

int enUzunluk=0;
int boyUzunluk=0;

printf("En ve Boy Uzunluklarini Giriniz: ");
scanf("%d%d", &enUzunluk, &boyUzunluk);
printf("\n\n");

dikdortgenciz(enUzunluk, boyUzunluk);
printf("\n");
}







Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



Sh4oTT


7hr33l3t73r

#3
Ascii Tablosuna baktiniz mi?

$ ascii
Usage: ascii [-dxohv] [-t] [char-alias...]
   -t = one-line output  -d = Decimal table  -o = octal table  -x = hex table
   -h = This help screen -v = version information
Prints all aliases of an ASCII character. Args may be chars, C \-escapes,
English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex 
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

Ben soyle duzenledim koseler haric.

$ ./d
En ve Boy Uzunluklarini Giriniz: 30 10


Ú____________________________¿
|                            |
|                            |
|                            |
|                            |
|                            |
|                            |
|                            |
|                            |
À____________________________Ù

Kod

//DongulerleDikdortgenCizimi

#include <stdio.h>

void dikdortgenciz (int enUzunluk, int boyUzunluk){

char karakter=0;
int i=0;
int j=0;

//Once Sol Ust Kose:

karakter=218; //KOSE
printf("%c", karakter);

//Ust Kenarları Cızelım:

karakter=95; //Yatay Cizgi

for (i=0; i<enUzunluk-2; i++){
printf("%c", karakter);
}

//Sag Ust Kose:

karakter=191; //KOSE
printf("%c", karakter);
printf("\n");


//Govde Kismi:

//Sol Yan Cizgiler:

for (i=0; i<boyUzunluk-2; i++){
karakter=124; //Dikey Cizgi
printf("%c", karakter);

for (j=0; j<enUzunluk-2; j++){
karakter=32; //Bosluk karakteri
printf("%c", karakter);
}
karakter=124; //Dikey Cizgi
printf("%c", karakter); //Sag Yandaki Cizgiler
printf("\n");
}

//Sol Alt Kose:

karakter=192;
printf("%c", karakter);

//Alt Kenarlar:

karakter=95; //Yatay Cizgi

for(i=0; i<enUzunluk-2; i++){
printf("%c", karakter);
}

//Sag Alt Kose:

karakter=217; //KOSE
printf("%c", karakter);


}



int main(){

int enUzunluk=0;
int boyUzunluk=0;

printf("En ve Boy Uzunluklarini Giriniz: ");
scanf("%d%d", &enUzunluk, &boyUzunluk);
printf("\n\n");

dikdortgenciz(enUzunluk, boyUzunluk);
printf("\n");
}

Ascii tablo 127'ye kadar, siz isterseniz 127'den sonrasina bakmak icin asagidaki kodu calistirin .
Bir sayi onceden gostermektedir.
Yani 32 bosluk ise 31 gostermekte.Siz bir sayi ustunu yaziniz.
217 kodu sizde neye denk geliyor bakmak lazim.Asigidaki kodun ciktisini alabilirsek.Ya da koselere ne yapmak istiyorsunuz?

awk 'BEGIN{for(i=31;i<300;i++)printf "%c \n %s",i,i}';echo
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT

@817c0d3r hocam terminale verdiginiz kodu yazdim soyle gosterdi:






Ben alttaki resimde ki 218-191-95-124-32-192-217 kodlari kullanmak istiyorum.


7hr33l3t73r

#5
0-255 arasi ben istediginizi goremedim.
Verdiginiz ascii tablosunda 0-255 arasinda kaldigi icin kullanilabilir ama sizde yok. Yukleyeceginiz fontlar ile nasil olur tam bilemiyorum.
Kisace ozetlersek, ascii tablosunu 0-255 arasi kullanabilirsiniz.
Dikkat etmeniz gereken nokta burasi.
Ben bir font ile deneme yaptim ama cok beceriksiz biriyim herhalde olmadi. :)

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT

@817c0d3r hocam kısacası benım fontmu yuklemem gerek :)  ;D

7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT

@817c0d3r Fontu nereye nasıl yukelyecegım pekı hocam :)

7hr33l3t73r

Forum arama kismi sorun verdi ve google amca uzerine yonlendirdi. :)
Forum arama Sonuclari
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT


7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



Sh4oTT

@Reverser hocam wchar kullanın dedınız ben hala anlamadım orayı :)

Reverser

Google'da "wchar_t C programming unicode character" şeklinde arat, fikir verecektir.

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-


char a[2]=ansii kodu

Böyle bir şey dene. ANSI karakterlerinin genişletilmesi 1 bit değil, 2 bit olarak hesaplanıyor. 2 olmaz ise 4 ve 8'i dene. Yine işine yaramazsa şu adrese bir bak: http://www.kadifeli.com/fedon/stdcprtr.php?8_5
http://www.cplusplus.com/reference/cwchar/
http://www.cplusplus.com/reference/cwchar/
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

ufuktn

Aktif olarak Ubuntu kullanmıyorum. Benim bildiğim kadarıyla Ubuntu'da ASCII yerine Unicode kullanılıyor. Unicode'un ilk 128 karakteri ASCII'nin ilk 128 karakteriyle aynı olduğu için bu karakterleri kullanırken fark edilmiyor ancak 128 numaralı ve sonrasındaki karakterlerde sorun çıkıyor. Tabi Windows, C++ derlerken hala ASCII kullandığı için sembollerin Windows'ta doğru görüntülenmesi normal. (Ama Visual Studio ile C# kodu yazarken Unicode destekleniyor, gariptir)

karakter = 218;
yerine
karakter = '⌜';
deneyin.

Eğer sizde görüntülenmiyorsa, tırnaklar içine sol üst köşe karakterini yapıştırdım. Unicode karakterlerin numaraları UTF-8, UTF-16 gibi sistemlere göre değişiklik gösterebileceğinden karaktere numara yerine sembolle atama yapmak daha kolay olur.

Açıklama biraz uzun oldu. Umarım yardımcı olur.

Sh4oTT