Dualzahl Berechnung in C

Status
Nicht offen für weitere Antworten.

hatata

Grünschnabel
hi, bin neu
letze Rechnung wird nicht nach dual: rausgegeben:/

C:
#include <stdio.h>

int berechne (int);

int main() {

    int Zahl;

    printf("Welche Zahl soll ich umrechnen? ");
    scanf("%d", &Zahl);

    printf("Oktal: %o\n", Zahl);

    printf("Hexadezimal: %X\n", Zahl);
    printf("Dual: %d\n", berechne(Zahl));

    return main();
}

int berechne (int x) {

    int x1, x2, x3, x4, x5, x6, x7;

    x1 = x  / 2;
    x2 = x1 / 2;
    x3 = x2 / 2;
    x4 = x3 / 2;
    x5 = x4 / 2;
    x6 = x5 / 2;
    x7 = x6 / 2;

    printf("%d %d %d %d %d %d %d %d \n", x7 % 2, x6 % 2, x5 % 2, x4 % 2, x3 % 2, x2 % 2, x1 % 2, x % 2);

    }
 
Zuletzt bearbeitet von einem Moderator:

Yaslaw

alter Rempler
Moderator
Zeig mal diene Returnzeile.
Falls es das Ergebnis aus de printf aus Zeile 32 ist: Der Returnwert ist kein int sondern ein String. Der Funktionsreturnwert ist aber als int definiert. Ebenfalls im printf in Zeile 15 wo du den Wert ausgeben willst, ist der Paramter auf eine Zahl definiert.

Ich kenne C nicht, aber etwa da sind die Fehler
C:
//Ausgabe als String mit %s
printf("Dual: %s\n", berechne(Zahl));


//Funktionsrückgabewert ein String. Keine Ahnung ob da in C string heisst - hab grad google angeworfen. müsste char* sein.
char* berechne (int x) {
    //berechnungen. 

    //TODO: Return ist so sicher falsch, da C gem. Anleitung bei printf nicht den Text zurückgibt. 
    //In anderen Sprachen würde es so funktionieren. Keine Ahnung was für ein ersatz man in C nimmt
    return printf("%d %d %d %d %d %d %d %d \n", x7 % 2, x6 % 2, x5 % 2, x4 % 2, x3 % 2, x2 % 2, x1 % 2, x % 2);
}
 

hatata

Grünschnabel
Zeig mal diene Returnzeile.
Falls es das Ergebnis aus de printf aus Zeile 32 ist: Der Returnwert ist kein int sondern ein String. Der Funktionsreturnwert ist aber als int definiert. Ebenfalls im printf in Zeile 15 wo du den Wert ausgeben willst, ist der Paramter auf eine Zahl definiert.

Ich kenne C nicht, aber etwa da sind die Fehler
C:
//Ausgabe als String mit %s
printf("Dual: %s\n", berechne(Zahl));


//Funktionsrückgabewert ein String. Keine Ahnung ob da in C string heisst - hab grad google angeworfen. müsste char* sein.
char* berechne (int x) {
    //berechnungen.

    //TODO: Return ist so sicher falsch, da C gem. Anleitung bei printf nicht den Text zurückgibt.
    //In anderen Sprachen würde es so funktionieren. Keine Ahnung was für ein ersatz man in C nimmt
    return printf("%d %d %d %d %d %d %d %d \n", x7 % 2, x6 % 2, x5 % 2, x4 % 2, x3 % 2, x2 % 2, x1 % 2, x % 2);
}
die ausgäbe ist dennoch die gleiche

Welche Zahl soll ich umrechnen? 26
Oktal: 32
Hexadezimal: 1A
0 0 0 1 1 0 1 0 //was halt erst nach Dual: stehen soll
Dual:
Welche Zahl soll ich umrechnen?
 

Yaslaw

alter Rempler
Moderator
Du rufst die Funktion auf. In dieser hats du printf stehen. Das gibt eine Ausgabe in die Konsole. Dann nimmst du den uns unbekannten Rückwert (aktueller Code würde uns helfen zu verstehen, was dein aktueller Stand ist) und übergibts ihn wieder einem printf, der dann einen Konsoloentext ausgibt. Dieses mal mit dem Text "Dual" und dem leeren Rückgabewert der Funktion.
Alles eine Frage der Reihenfolge. Wenn die Funktion wirklich Konsolentext ausgeben soll, dann musst du den Aufruf ändern
C:
    printf("Hexadezimal: %X\n", Zahl);
    printf("Dual: %d\n");
    berechne(Zahl);
 

hatata

Grünschnabel
Du rufst die Funktion auf. In dieser hats du printf stehen. Das gibt eine Ausgabe in die Konsole. Dann nimmst du den uns unbekannten Rückwert (aktueller Code würde uns helfen zu verstehen, was dein aktueller Stand ist) und übergibts ihn wieder einem printf, der dann einen Konsoloentext ausgibt. Dieses mal mit dem Text "Dual" und dem leeren Rückgabewert der Funktion.
Alles eine Frage der Reihenfolge. Wenn die Funktion wirklich Konsolentext ausgeben soll, dann musst du den Aufruf ändern
C:
    printf("Hexadezimal: %X\n", Zahl);
    printf("Dual: %d\n");
    berechne(Zahl);
habs vielen DANK!

C:
#include <stdio.h>

int berechne (int);

int main() {

    int Zahl;

    printf("Welche Zahl soll ich umrechnen? ");
    scanf("%d", &Zahl);

    printf("Oktal: %o\n", Zahl);
    printf("Hexadezimal: %X\n", Zahl);

    printf("Dual: ");  // musste nur das %d weglassen und
    berechne(Zahl);   // und das außerhalb der Klammer schreiben
     
    printf("\n");
    return main();
}

int berechne (int x) {

    int x1, x2, x3, x4, x5, x6, x7;

    x1 = x  / 2;
    x2 = x1 / 2;
    x3 = x2 / 2;
    x4 = x3 / 2;
    x5 = x4 / 2;
    x6 = x5 / 2;
    x7 = x6 / 2;

    return
    printf("%d %d %d %d %d %d %d %d \n", x7 % 2, x6 % 2, x5 % 2, x4 % 2, x3 % 2, x2 % 2, x1 % 2, x % 2);
}
 

Zvoni

Erfahrenes Mitglied
pfui bäh.
Wieso überhaupt eine Funktion verwenden, wenn der Rückgabe-Wert (mehr oder weniger) ignoriert wird, und die Ausgabe in der Funktion selbst stattfindet?

Klar, ich kann ne Sechskantschraube auch mit ner Rohrzange zudrehen.....
 

hatata

Grünschnabel
pfui bäh.
Wieso überhaupt eine Funktion verwenden, wenn der Rückgabe-Wert (mehr oder weniger) ignoriert wird, und die Ausgabe in der Funktion selbst stattfindet?

Klar, ich kann ne Sechskantschraube auch mit ner Rohrzange zudrehen.....
ich hab net nach ner meinung gefragt
hast auch nicht in einem mal alles vereinfacht schaffen können gut das man mal was weiß gott
 

Zvoni

Erfahrenes Mitglied
ich hab net nach ner meinung gefragt
hast auch nicht in einem mal alles vereinfacht schaffen können gut das man mal was weiß gott
Es geht darum von Anfang an, Programm Code korrekt zu strukturieren.
es geht darum von Anfang an zu lernen, dass Dinge die du nicht brauchst bzw. nicht korrekt nutzt dich am Ende nur aufhalten und schlimmstenfalls verwirren und einen bug verdecken
 
Status
Nicht offen für weitere Antworten.

Neue Beiträge