Umwandlung von Dezi ins Okta oder Hexa oder Dual

@Jennesta
Hast du da nicht die Variable "basis" im Code unterschlagen? Meintest du sowas?
C:
int konvertieren(int basis, int zahl)
{
    static char digits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    char erg[100] = { 0 };
    int i = 0;
    
    while(zahl > 0) {
        int rest = zahl%basis;
        zahl = zahl/basis;
        erg[i] = digits[rest];
        i++;
    }
    while(i >= 0) {
        printf("%c", erg[i]);
        i--;
    }
    return 1;
}
@Thread
C:
switch(neu[i]){       
    case 0: neu[i]=0;break;
/...
Also wenn neu[i] == 0, dann mache neu[i] = 0 ? Warum?

Du könntest einfach Jennestas Code nehmen, ein kleiner Hinweis zu deinem:
C:
 case 0: neu[i]=0;break;
0 != '0'
Löst man (der Compiler) das auf, kommt folgendes raus:
'0' == 48
'1' == 49
...
'A' == 65
'B' == 66
...

Zudem ist dein return-Wert... Seltsam.

Gruss
cwriter
 
Zuletzt bearbeitet:
moin !
Das Programm läuft bei mir auch gut, aber ich möchte dieses Menü :

C++:
           printf("Beenden des Programms ( drucken Sie 0)");
           printf("\n");
           printf("Neustart des Programms (drucken Sie 1)");
           printf("\n");
           scanf("%i",&beenden);    
    
    }while(beenden == 1);
im Unterprogramm haben.

als Ergebnis bekomme ich z.b:
,, 5A Ergebnis" . warum wird nicht einfach ,, Ergebnis 5A " gezeigt?
 
Sollen wir dir dein Programm ganz schreiben?
Überlege mal:
Beim Funktionsaufruf von printf() muss der Rückgabewert der Funktion "konvertieren" ja schon bekannt sein, d.h. das Ergebnis muss von der Funktion schon geschrieben sein.
Zuerst printf("Ergebnis"); und dann konvertiere(16,zahl);

Gruss
cwriter
 
Sollen wir dir dein Programm ganz schreiben?

ne das Programm soll von mir geschrieben sein, darum stelle ich hier immer gerne fragen, dank dieser webseite habe ich ein Praktikum und dazu die Klausur bestanden. Ich danke alle Mitglieder dieser Seite dafür.

wenn ich was hier frage, dann erst wenn ich mir mühe gebe und dann merke ich: es ist bestimmt einen Trick was ich noch lernen muss:=)

meine Letzte frage für dieses Programm wäre dann, wieso zeigt das Programm das Menü nicht nach dem Ergebnis ?
C++:
#include <stdio.h>

 

   int konvertieren(int basis, int zahl)
{
	int beenden=0;
	do{

    char umwandeln[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    char erg[100] = { 0 };
    int i = 0;
      
    while(zahl > 0) {
        int rest = zahl%basis;
        zahl = zahl/basis;
        erg[i] = umwandeln[rest];
        i++;
    }
    while(i >= 0) {
        printf("%c", erg[i]);
        i--;}
        return 1;
        
     //Programm beenden
           printf("\nBeenden des Programms ( drucken Sie 0)");
           printf("\n");
           printf("Neustart des Programms (drucken Sie 1)");
           printf("\n");
           scanf("%i",&beenden);    
    	
    }while(beenden == 1);   
}
			         
    int main (){
    	
        // Variablen intitialisieren
    int z;
    int     b = 0;
    
        // Basis einlesen
            printf("Bitte eine Basis: ");
            scanf("%i", &b);    
        
        // Zahl einlesen
	        printf("Bitte eine Zahl eingeben:");
            scanf("%i",&z);

        // Funktion aufruf
 
    printf("Ergebnis: ");
	konvertieren(b,z) ;
	
    return 0;
}
 
meine Letzte frage für dieses Programm wäre dann, wieso zeigt das Programm das Menü nicht nach dem Ergebnis ?

Das return gehört an dieser Stelle nicht hin. Du beendest dort die Funktion und übergibst dem Aufrufer den Wert 1. Pack das hinter die do-while, oder lass es ganz weg und mach aus der Funktion eine void.

Ich empfehle dir auch sehr einen Debugger zu nutzen, weil wenn du solche Fehler hast kannst du ganz einfacher Schritt für Schritt durch dein Programm gehen und den Fehler sehr leicht selbst finden.
 
Zurück