Ausgabe einer Ascii Tabelle in C
2012-01-06 16:13
Anonymer User
Hallo,
weiss irgendwer wie man eine Ascii Tabelle in C erstellt.
Das Grundgerüst soll so aussehen (Ascii Code Asci Zeichen):
0 \0 64 @ 128 \128 192 \192
1 \1 65 A 129 \129 193 \193
2 \2 66 B 130 \130 194 \194
…. …… ……….. …………
(1) Der Ascii-Code soll rechtsbündig (s.o.) ausgegeben werden mit maximal 2 führenden Leerzeichen.
(2) ASCII-Zeichen wird rechtsbündig mit 4 führenden Leerzeichen ausgegeben.
Alle ASCII-Zeichen zwischen 33 und 126 sollen ganz normal ausgegeben werden.
Die ASCII-Zeichen, \a, \b, \t, \n, \v, \f, \r werden als solche ausgeben (also 0 - 13). Die Restlichen ASCII-Zeichen sollen (s.o.) mit einem Backslash gefolgt vom ASCII-Code dargestellt werden.
Mein Ansatz war:
#include <stdio.h>
#include <limits.h>
int main()
{
int i, spalte1, spalte2, spalte3, spalte4;
char *trenner = "";
// Zahlen fuer Spalten
while (i <= 255)
{
spalte1 = i;
spalte2 = i+64;
spalte3 = i+128;
spalte4 = i+192;
// 1. Spalte
if(spalte1 >= 0 && spalte1 <= 63)
{
switch(i)
{
case 0: printf("%3d %4s",spalte1,"\\0");
break;
case 1: printf("%3d %4s",spalte1,"\\1");
break;
case 2: printf("%3d %4s",spalte1,"\\2");
break;
case 3: printf("%3d %4s",spalte1,"\\3");
break;
case 4: printf("%3d %4s",spalte1,"\\4");
break;
case 5: printf("%3d %4s",spalte1,"\\5");
break;
case 6: printf("%3d %4s",spalte1,"\\6");
break;
case 7: printf("%3d %4s",spalte1,"\\a");
break;
case 8: printf("%3d %4s",spalte1,"\\b");
break;
case 9: printf("%3d %4s",spalte1,"\\t");
break;
case 10: printf("%3d %4s",spalte1,"\\n");
break;
case 11: printf("%3d %4s",spalte1,"\\v");
break;
case 12: printf("%3d %4s",spalte1,"\\f");
break;
case 13: printf("%3d %4s",i,"\\r");
break;
}
if ((spalte1 >= 14) && (spalte1 <= 32))
{
printf("%3d %s%d",spalte1,"\\",spalte1);
}
if ((spalte1 >= 33) && (spalte1 <= 63))
{
char charsp1 = spalte1;
printf("%3d %4c",spalte1, charsp1);
}
}
// 2. Spalte
if (spalte2 >= 64 && spalte2 <= 127)
{
if (spalte2 != 127)
{
char charsp2 = spalte2;
printf("%13s%3d %4c",trenner,spalte2,charsp2);
}
else
{
printf("%13s%3d %s%d",trenner,spalte2,"\\",spalte2);
}
}
// 3. Spalte && 4. Spalte
if (spalte3 > 128 && spalte4 <= 255)
{
if (spalte3 >= 128 && spalte3 <= 191)
{
printf("%13s%3d %s%d",trenner,spalte3,"\\", spalte3);
}
if (spalte4 >= 192 && spalte4 <= 255)
{
printf("%13s%3d %s%d\n",trenner,spalte4,"\\",spalte4);
}
}
i++;
}
return 0;
}
Sollte eleganter zu lösen sein, weiß aber nicht wie. Auch ist auf diese Weise die 1. Zeile ein wenig verschoben. Kann mir jemand weiterhelfen?
weiss irgendwer wie man eine Ascii Tabelle in C erstellt.
Das Grundgerüst soll so aussehen (Ascii Code Asci Zeichen):
0 \0 64 @ 128 \128 192 \192
1 \1 65 A 129 \129 193 \193
2 \2 66 B 130 \130 194 \194
…. …… ……….. …………
(1) Der Ascii-Code soll rechtsbündig (s.o.) ausgegeben werden mit maximal 2 führenden Leerzeichen.
(2) ASCII-Zeichen wird rechtsbündig mit 4 führenden Leerzeichen ausgegeben.
Alle ASCII-Zeichen zwischen 33 und 126 sollen ganz normal ausgegeben werden.
Die ASCII-Zeichen, \a, \b, \t, \n, \v, \f, \r werden als solche ausgeben (also 0 - 13). Die Restlichen ASCII-Zeichen sollen (s.o.) mit einem Backslash gefolgt vom ASCII-Code dargestellt werden.
Mein Ansatz war:
#include <stdio.h>
#include <limits.h>
int main()
{
int i, spalte1, spalte2, spalte3, spalte4;
char *trenner = "";
// Zahlen fuer Spalten
while (i <= 255)
{
spalte1 = i;
spalte2 = i+64;
spalte3 = i+128;
spalte4 = i+192;
// 1. Spalte
if(spalte1 >= 0 && spalte1 <= 63)
{
switch(i)
{
case 0: printf("%3d %4s",spalte1,"\\0");
break;
case 1: printf("%3d %4s",spalte1,"\\1");
break;
case 2: printf("%3d %4s",spalte1,"\\2");
break;
case 3: printf("%3d %4s",spalte1,"\\3");
break;
case 4: printf("%3d %4s",spalte1,"\\4");
break;
case 5: printf("%3d %4s",spalte1,"\\5");
break;
case 6: printf("%3d %4s",spalte1,"\\6");
break;
case 7: printf("%3d %4s",spalte1,"\\a");
break;
case 8: printf("%3d %4s",spalte1,"\\b");
break;
case 9: printf("%3d %4s",spalte1,"\\t");
break;
case 10: printf("%3d %4s",spalte1,"\\n");
break;
case 11: printf("%3d %4s",spalte1,"\\v");
break;
case 12: printf("%3d %4s",spalte1,"\\f");
break;
case 13: printf("%3d %4s",i,"\\r");
break;
}
if ((spalte1 >= 14) && (spalte1 <= 32))
{
printf("%3d %s%d",spalte1,"\\",spalte1);
}
if ((spalte1 >= 33) && (spalte1 <= 63))
{
char charsp1 = spalte1;
printf("%3d %4c",spalte1, charsp1);
}
}
// 2. Spalte
if (spalte2 >= 64 && spalte2 <= 127)
{
if (spalte2 != 127)
{
char charsp2 = spalte2;
printf("%13s%3d %4c",trenner,spalte2,charsp2);
}
else
{
printf("%13s%3d %s%d",trenner,spalte2,"\\",spalte2);
}
}
// 3. Spalte && 4. Spalte
if (spalte3 > 128 && spalte4 <= 255)
{
if (spalte3 >= 128 && spalte3 <= 191)
{
printf("%13s%3d %s%d",trenner,spalte3,"\\", spalte3);
}
if (spalte4 >= 192 && spalte4 <= 255)
{
printf("%13s%3d %s%d\n",trenner,spalte4,"\\",spalte4);
}
}
i++;
}
return 0;
}
Sollte eleganter zu lösen sein, weiß aber nicht wie. Auch ist auf diese Weise die 1. Zeile ein wenig verschoben. Kann mir jemand weiterhelfen?