Char 2 Hex
-
Hallo,
bin immernoch relativ neu in C un deshalb bitte ich um etwas Mitleid.Die Aufgabenstellung lautet:
Das char2hex ist ein Programm zur Konvertierung eines über die Tastatur
eingegebenes Zeichen in die entsprechende ASCII Hexadezimalzahl. Dabei
darf das „%x“ oder „%X“ Formatierungszeichen NICHT verwendet werdenHab jetzt folgendes Programm dazu geschrieben:
#include <stdlib.h> #include <stdio.h> #define ULONG_COUNT 18446744073709551616 // 0 - 18.446.744.073.709.551.615 char *Hexwert (unsigned long dezimal) { char Erg[200]; unsigned long i = 16; do { i <<= 4; // *= 16 } while (i < dezimal); i >>= 4; char pos = 0; while (i != 1) { char hex = dezimal / i; dezimal >>= 4; Erg[pos++] = hex < 10 ? '0' + hex : 'A' + hex; i >>= 4; } Erg[pos] = '\0'; return Erg; } int main(void){ unsigned long dezimal = 0; char weiter = 'J'; do { printf("\nBitte geben Sie ein beliebiges Zeichen ein: "); if (scanf("%d", &dezimal) < 1 ) { printf("Fehler beim Lesen von der Standarteingabe"); return EXIT_FAILURE;} printf("\n\n"); printf("Ergebnis Hexadezimal:\t%s\n", Hexwert(dezimal)); while (getchar() != '\n'); printf("Moechten Sie noch ein Zeichen eingeben [J/N]: "); scanf("%c", &weiter); while (getchar() != '\n'); } while( toupper(weiter) == 'J'); return EXIT_SUCCESS; }
Leider liefert mir das Programm keine Lösung... Ich hoffe, dass sich das mal jmd angucken kann un mir Lösungsvorschläge liefern könnte.
Schon mal vielen Dank im voraus.
-
Das fängt ja schon einmal damit an, dass dezimal bei dir kein Zeichen sondern eine Zahl ist. Da du nicht verraten willst, was dein Fehler überhaupt ist, lasse ich daher mal das erste was ich gefunden habe als endgültige Antwort stehen.
-
char Erg[200];
ist eine lokale Variable in Hexwert().
Diese ist nicht mehr gültig, sobald du die Funktion Hexwert() verlässt.
Der Rückgabewert von Hexwert() zeigt aber auf Erg (da wird keine Kopie angelegt).Bei
hex < 10 ? '0' + hex : 'A' + hex;
wenn hex == 10 ist, hast du kein 'A' sondern ein 'K' (10 + 65 = 75)
-
Schonmal dafür vielen dank...
mein Problem ist, dass jede Eingabe die ich mache, den "Fehler in der Standarteingabe" hervorruft,
wenn ich diesen aus dem Programm entferne, rechnet es auch nicht in Hex um sondern liefert mir immer den Wert 0.
Könnte mit der falschen Deklaration zusammenhängen
-
"%d" ist der Formatspecifier für
int
und nicht fürunsigned long
.