C-Algorithmus für Hexadezimalzahladdition

Post Reply
Message
Author
litschi

C-Algorithmus für Hexadezimalzahladdition

#1 Post by litschi »

Hallo,

ich soll ein Programm in C89 schreiben, welches Hexadetimalzahlen addiert. Ich habe keine Ahnung, wie ich das Problem löse.

Ein Programm für die Rechnung von Dezimalzahlen sind kein Problem, das kann ich.

Für ein paar Zeilen Code wäre ich sehr dankbar.

ein Gast

#2 Post by ein Gast »

Ich habe keine Ahnung, wie ich das Problem löse.
Schön, dann hast du ja jetzt eine Aufgabe mit welcher du das lernen kannst :-)

sorry, aber das ist wirklich recht lustig ^^

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#3 Post by Lateralus »

Vielleicht hilft dir das weiter:

Code: Select all

#include <stdio.h>

int main&#40;int argc, char **argv&#41;&#123;
        int i;
        int number;

        for&#40;i=1; i<argc; i++&#41;&#123;
                if &#40; sscanf&#40;argv&#91;i&#93;, "0x%x", &number&#41; == 0&#41;&#123;
                        printf&#40;"Ungueltige Eingabe&#58; %s\n", argv&#91;i&#93;&#41;;
                &#125;
                else&#123;
                        printf&#40;"%s -> %d\n", argv&#91;i&#93;, number&#41;;
                &#125;
        &#125;

        return 0;
&#125;
Das sieht dann so aus:

Code: Select all

user@host&#58;~/programming/c/hex$ ./a.out 0xf 0x1 0xf5 43 fd
0xf -> 15
0x1 -> 1
0xf5 -> 245
Ungueltige Eingabe&#58; 43
Ungueltige Eingabe&#58; fd
Schau dir die Handbuchseiten zu sscanf(3) an...

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

scanf kann auch Hexadezimalzahlen einlesen, printf kann auch Hexadezimalzahlen ausgeben.

$ man scanf
$ man printf

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

litschi

#5 Post by litschi »

Danke für die Hilfe erstmal.

Jetzt habe ich ein funktionsfähiges Programm erstellt:

Code: Select all

// Hexaddierer
#include <stdio.h>

int main()
{

        int zahl;
        int zahl2;
        int summe;

 	printf("\t hallo.\n");
		fflush(stdout);
    printf("Geben Sie eine Zahl im Hexadezimalsystem ein: ");
    	scanf("%x", &zahl);
    
    
    printf("Geben Sie eine zweite Zahl im Hexadezimalsystem ein: ");
    	scanf("%x", &zahl2);
    printf("Zahl1: %x (hex) = %d (dez)\n", zahl, zahl);
    printf("Zahl2: %x (hex) = %d (dez)\n", zahl2, zahl2);
    printf("Rechnung im Hex-format: %x + %x = %x \n", zahl, zahl2, summe=zahl+zahl2);
		fflush(stdout);
	
	printf("ende.\n");

        return 0;
} 
&#91;code&#93;

Ich bekomme es aber nicht fehlerfrei hin, die Eingabeüberprüfung wie oben korrekt zu integrieren. Grund hierfür ist, dass die Zahlen erst nach Aufforderung eingegeben werden sollen.

Wie geht das?
Danke schonmal im Voraus. :-)
&#91;/code&#93;

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#6 Post by Lateralus »

Du solltest den Block

Code: Select all

printf&#40;"Geben Sie eine Zahl im Hexadezimalsystem ein&#58; "&#41;;
scanf&#40;"%x", &zahl&#41;;
in eine while-Schleife packen, die den Return-Wert überprüft - scanf gibt die Anzahl der gültigen Zeichen zurück. Du musst dabei allerdings beachten, dass bei "%x" sowohl "0x(hex)", "0X(hex)" "(hex)" gültige Eingaben sind - Bei meinem obigen Beispiel habe ich "0x(hex)" erzwungen.

Post Reply