[C] ASCII-Tabelle ausgeben

New C´ler

Cadet 2nd Year
Registriert
Apr. 2006
Beiträge
29
Hey...hab ma wieder nen kleines Problem. also soll halt die ASCII-Tabelle ausgeben, is ja soweit kein problem aber die Schleife will patu nich enden, obwohl ich ja eigentlich ne abbruchbedingung drin hab.

vlt hat jmd ne idee...es soll nur mit einer char variable die aufaddiert werden soll funktionier, also weder array noch was anderes

so schauts aus, danke im vorraus schonmal :)
PHP:
#include <stdio.h>

void main()

unsigned char d=0;
	
     do
	{
	  printf(" %3.d = %c |", d, d);
	  d++;
	}
	while (d<=255);   /*und das hier will einfach net funzen*/
}
 
Zuletzt bearbeitet:
Wenn ein unsigned char 8 Bit hat (hat er auf quasi jeder Plattform), so kann er niemals > 255 werden. Damit ist die Bedingung <= 255 immer wahr. Was übrigens bei einem Überlauf passiert (d = 255, d++), ist undefiniert. Auf den meisten Plattformen steht dann wieder 0 drin.

Achso, und void main ist kein Standard-C. int main und am Schluss ein return 0. ;)

Für dein Beispiel sollte es übrigens reichen, wenn du aus unsigned char ein int machst. Und die ersten 32 Zeichen des ASCII-Zeichensatzes sind nicht darstellbar. Es werden sich also irgendwelche merkwürdigen Effekte abspielen. ;) Und nochwas.. ^^ Der ASCII-Code hat nur 7 Bit - geht also nur bis 127. Danach kommen spezielle Kodierungen, je nach eingestellter Codepage.
 
Zuletzt bearbeitet:
unsigned char nimmt max. 254 Zeichen auf..die Warnung des Compilers besagt schon das die Kontrollstruktur übersprungen..nicht im Bereich von Variable d liegt.. 255 wird nie erreicht..Du könntest auch int nehmen..da du ja mit printf eh nach Character konvertierst ;-) Doppelter Cast ..ei

Hier deine Variante in ANSI C Standard.
PHP:
#include <stdio.h>

int main(){

unsigned char d=0;
    
     do
    {
      printf(" %3.d = %c |", d, d);
      d++;
    }
    while (d<=254);   /*und das hier will einfach funzen ;-)*/
	
	return 0;
}

oder aber du sagst bei while(d<255) ginge auch..

MFG
 
Zuletzt bearbeitet:
ok, das leuchtet ein, is mir nich aufgefallen...

unsigned char [0...255] hat ja den bereich...

die aufgabe is eine Laufvariable als char zu deklarieren.

wie bekomm ich nu den abbruch hinne... :rolleyes:

ich wollte ja erst parallel dazu ne integer variable laufen lass aber wir sollens ohne lösen...?!?!
 
Zuletzt bearbeitet:
New C´ler schrieb:
wie bekomm ich nu den abbruch hinne... :rolleyes:

Code:
#include <stdio.h> 

int main() 
{
   unsigned char d=0; 
     
   for( ; ; ) { 
      printf(" %3.d = %c |", d, d);
      if( d == 255) {
         break;
      }
      else {
         ++d;
      }
   }
   return 0;
}
 
PHP:
#include <stdio.h>

int main(){

	char result;
    int i=0;
    
	do
    {
		result=i;
		printf(" %3.d = %c |", result, result);
		i++;
    }
    while (i<127);  

	return 0;
}
 
Zuletzt bearbeitet:
@ 7H3 N4C3R7H3....danke!

@ronny, so ne version hat ich auch schon, da is eben wieder ne zweite laufvariable drinne...bei mir hieß sie int abbr;
aber trotzdem danke fuer die antwort :)
 
Schau doch bitte hin mein Post von vorhin beinhaltet schon die Lösung..
aber hier nochmal für Blinde ;-P

PHP:
#include <stdio.h>

int main(){

unsigned char d=0;
    
    do
    {
      printf(" %3.d = %c |", d, d);
      d++;
    }
    while (d<=254);
	
	return 0;
}

Wie oben und es funktioniert innerhalb erwarteter Parameter ;-)
 
Zuletzt bearbeitet:
@ TK-Shockwave

problem is nur, dass dann dann die 255 nich dargestellt wird

drumm müsste man nach der while schleife noch

PHP:
printf(" %3.d = %c |", 255, 255);

einfügen, dann würds passen :)
 
Hallo

Ich bin neu hier und habe ein ähnliches Problem.

Hier mein Code

#include <stdio.h>
#include <conio.h>

void main(void)
{
int zeilenzahl, ordnungszahl = 32;

do
{
printf("\n");
for(zeilenzahl = ordnungszahl; zeilenzahl < ordnungszahl + 16&&zeilenzahl
<= 255;zeilenzahl++)
{
printf(" %3d",zeilenzahl);
}
printf("\n");

for(zeilenzahl = ordnungszahl;zeilenzahl < ordnungszahl + 16&& zeilenzahl
<= 255;zeilenzahl++)
{
printf(" %3c",zeilenzahl);
}
ordnungszahl = zeilenzahl;
printf("\n");
}while(ordnungszahl <= 255);

getch();
}

Die Ausbabe funktioniert so, aber ich möchte, dass die Ausgabe geteilt wird. Z. B ASCII 32 bis ASCII 127 dann ein STOP und wenn ich eventuell RETURN betätige der Rest. Also ASCII 128 bis 255.

Wei kann ich diese Einteilung machen? Habe probiert und probiert, komme aber zu keinen Ergebnis. Im Moment bin völlig Verwirrt und habe keine Idee mehr.

Danke für Eure Hilfe

daggel
 
@daggel:

du könntest deine Schleife einfach bis 127 laufen lassen, statt bis 255, danach eine pause einrichten und dann die restlichen Werte ausgeben.
In deinem Code geschrieben wäre das etwa:

Code:
#include <stdio.h>
#include <conio.h>

void main(void) {

  int zeilenzahl, ordnungszahl = 32;

  do {
    printf("\n");
    for(zeilenzahl = ordnungszahl; zeilenzahl < ordnungszahl + 16&&zeilenzahl<= 255;zeilenzahl++)
      printf(" %3d",zeilenzahl);

    printf("\n");

    for(zeilenzahl = ordnungszahl;zeilenzahl < ordnungszahl + 16&& zeilenzahl<= 255;zeilenzahl++)
      printf(" %3c",zeilenzahl);

    ordnungszahl = zeilenzahl;
    printf("\n");
  }while(ordnungszahl <= 127);

  getch();

  do {
    printf("\n");
    for(zeilenzahl = ordnungszahl; zeilenzahl < ordnungszahl + 16&&zeilenzahl<= 255;zeilenzahl++)
      printf(" %3d",zeilenzahl);

    printf("\n");

    for(zeilenzahl = ordnungszahl;zeilenzahl < ordnungszahl + 16&& zeilenzahl<= 255;zeilenzahl++)
      printf(" %3c",zeilenzahl);

    ordnungszahl = zeilenzahl;
    printf("\n");
  }while(ordnungszahl <= 255);

  getch();
}
 
Zurück
Oben