developers-forum.de

Normale Version: Stringlänge mit strlen()
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Gast

Hallo ihr,

ich bin C-Anfänger und versuche grade meine ersten Schritte. Geschockt
Ich möchte binäre Zahlen ins Dezimalsystem umrechnen, bin allerdings nicht sonderlich weit gekommen. Ich brauche die Länge der eingegeben (binären) Zahl (die erstmal als String vorliegt).

Code:
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main() {
    char binar[100];
    scanf("%s", &binar);
    size_t laenge = strlen(binar);

    printf("\nLaenge: %u", laenge);
}


Dieser Code gibt mir die Länge, kein Problem. Wenn ich das allerdings in meinem Programm machen möchte...

Code:
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int toDecimal() {
    int decimal = 0;
    int zaehler = 1;
    char binar[100];

    printf("\n\nPlease enter binary number: ");
    scanf("%s", &binar);
    printf("\nEingegebene Zahl: %s", binar);

    size_t laenge = strlen(binar);

    printf("\nLaenge: %u", laenge);
...


...gehts nicht mehr. toDecimal() wird von main() aufgerufen. Die Funktion gibt eine Zahl aus, deren Anfang die Länge des Strings ist (z.B. 532 wenn der String 5 Zeichen hat).
Da frage ich mich natürlich: Warum? Traurig

Gruß, Gast

Willkommen im Forum,

bei mir funktioniert der Code-Abschnitt. Wenn ich zum Beispiel 011011 eingebe, bekomme ich als Ausgabe:

Programm schrieb:
Please enter binary number: 011011

Eingegebene Zahl: 011011
Laenge: 6


Wenn du unter Windows programmierst, dann kann es sein, dass die Zeilen einfach zusammengerutscht sind, da Windows nicht \n sondern \r\n als New-Line Zeichen verwendet.

Der Code müsste dann so aussehen:

Code C :
    printf("\r\n\r\nPlease enter binary number: ");
    scanf("%s", &binar);
    printf("\r\nEingegebene Zahl: %s", binar);
 
    size_t laenge = strlen(binar);
 
    printf("\r\nLaenge: %u", laenge);



N43

P.S.: Mit [ code=c] ... Quellcode ... [/code] kannst du Quellcode mit Syntax-Highlightning versehen

Gast

Ja ich bin unter Windows.
Hab das mit \r\n ausprobiert - Fehlanzeige Traurig

Eingabe: 011011
Laenge: 654 Traurig

Trotzdem danke für den Versuch =)
Hat noch jemand ne Idee?

Gruß Gast
Abend,

das ist ein komischer Fehler. Poste mal den kompletten Code. Eventuell kommt die Ursache für die Ausgabe etwas weiter unten im Code.


N43

Gast

Code C :
 
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int toDecimal() {
    int decimal = 0;
    int zaehler = 1;
    char binar[100];
 
    printf("\r\n\r\nPlease enter binary number: ");
    scanf("%s", &binar);
    printf("\r\nEingegebene Zahl: %s", binar);
 
    size_t laenge = strlen(binar);
 
    printf("\r\nLaenge: %u", laenge);
    for(int x = 0; x <= strlen(binar); x++) {
        int indx = strlen(binar) - x;
        if (binar[indx] == '1') {
            decimal += zaehler;
        }
        zaehler*=2;
    }
printf("%d\r\n\n", decimal);
    return 0;
}
 
int main() {
    int menu;
 
    do{
        printf("Menu\n-----\n\n");
        printf("<1> binary to decimal\n");
        printf("<2> decimal to binary\n\n");
        printf("<3> exit");
 
        printf("\n\nPlease choose: < >\b\b");
        scanf("%d", &menu);
        fflush(stdin);
 
        switch(menu){
            case 1  :   toDecimal();
                        break;
            case 2  :   printf("ZWEI");
                        break;
            case 3  :   printf("ENDE");
                        break;
            default :   printf("\n\n\n");
                        break;
        }
    } while(menu != 3);
    return 0;
}


Das Programm zeigt ein Menü, damit der User auswählen kann in welche Richtung er umrechnen möchte. Die Umrechnung von Dezimal zu Binär ist noch nicht drin.
Ich hab keine Ahnung wo der Fehler sein könnte, bin dankbar für jede Hilfe...

Gruß Gast
Hallo,

der Fehler entsteht bei der Ausgabe der umgewandelten Zahl:
Code C :
printf("%d\r\n\n", decimal);
Da ist vorher kein Zeilenumbruch drinne, weswegen die Zahl direkt an die Länge angehängt wird.

Damit die richtige Zahl rauskommt, muss die äußere Schleife noch etwas angepasst werden.

Bzw. das
Code CPP :
#include<iostream>
 
using namespace std;
brauchste garnet. In dem Header sind die Ein-/Ausgabe Routinen für C++.


N43

Gast

N43 du bist genial, es funktioniert! Smilie
Ich war schon am Verzweifeln, hab überlegt ob mein Compiler nen Bug haben kann...

Danke!
Gruß Gast
Referenz-URLs