Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String gibt kryptische Zeichen aus...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2004, 12:47 Uhr
~klfischer
Gast


Hallo,

Folgendes Problem:

Wir befuellen einen String zeichenweise mit dem Ergebniss einer long Rechenoperation. Das funktioniert soweit wunderbar, im Debugger werden auch die richtigen Ergebnisse im Array angezeigt.

Nur bei der Ausgabe des Strings mit einer for Schleife, kriegen wir nicht das gewünschste Ergebniss sondern nur kryptische Zeichen (Smiles,Pik,Herz,Karos etc....). Ein Cast Operation hat daran auch nichts geändert (long->char).

Leider muessen wir uns an diese Vorgehensweise halten, da sie Bestandteil unsere r Aufgabenstellung ist.

Vielen Dank schonmal für evt. Hilfe hierzu...


C++:

// ZS_Umrechner.cpp

#include <iostream.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include "ZS_Umrechner.h"



int main()
{
    long basisNeu, dezZahl;
    int nochmal=0;

    ZS_Umrechner myZScalc;

    while(nochmal == 0)    // Schleife für mehrere Durchlaeufe
    {
        system("CLS");    // vor jedem durchlauf Konsole leeren
        
        int wtrue1=0;
        while(wtrue1 == 0)
        {
            cout <<"\n Bitte neue Basis eingeben (Wertebereich 2-36): ";
            cin >> basisNeu;

            if(basisNeu<2 || basisNeu>36)    // ueberprüfen ob Basis in Wertebereich passt
            {
                cout <<"\n Die Basis kann nur die Werte 2 bis 36 annehmen..." <<endl;
                 Sleep(3000);    // 3 sec warten
                system("CLS");
            }
            else
            {
                myZScalc.ein_Basis(basisNeu);
                wtrue1=1;
            }
        };    //while(wtrue1 == 0)


        cout <<" Bitte umzurechnende Zahl eingeben (nur ganze Zahlen): ";
        cin >> dezZahl;
        myZScalc.ein_DezWert(dezZahl);

        cout << "\n\n Noch ne Zahl umrechnen [0] oder Abbruch [1] ? ";
        cin >> nochmal;
    }
    
return 0;
}    //main()


// ZS_Umrechner.h


class ZS_Umrechner
{
    protected:

    long DezWert;
    char ErgWert[100];
    long Basis;
    long wertAlt;
    int zTmp1;
    int buffer;


    public:

    // void umrechnen()    // DezWert in ErgWert umrechnen
    long umrechnen()    // DezWert in ErgWert umrechnen
    {
        wertAlt=DezWert;    // DezWert soll fuer aus_DezWert() erhalten bleiben
        


        if(Basis<=9)    // bei Basis 2 -> 9
        {

            zTmp1=0;
            buffer=0;
            while(wertAlt!=0)
            {
            buffer=wertAlt%Basis;
            ErgWert[zTmp1]=static_cast<char>(buffer);
            wertAlt/=Basis;            
            zTmp1++;
            }

            ErgWert[zTmp1]='\0';
        }
        else    // Basis > 9 => fuer Zahlen > 9 muessen Buchstaben a->z genutzt werden
        {
        //Platzhalter
        }    
        // kucken  

        for (zTmp1;zTmp1>=0;zTmp1--)
        {
            cout<<ErgWert[zTmp1]<<endl;        // kommt komischer ascii code raus.
                            
        }
    return 0;    

    };    //umrechnen()


    void ein_Basis(long fBasis)    // Basis eingeben
    {
        Basis=fBasis;
    };    //ein_Basis(long)

    
    void ein_DezWert(long fDezWert)    // DezWert eingeben
    {
        DezWert=fDezWert;
    };    //ein_DezWert(long)

    
    long aus_DezWert()        // DezWert ausgeben
    {
        return DezWert;
    };    //aus_DezWert()
    
    long aus_Basis()        // Basis ausgeben
    {
        return Basis;
    };    //aus_Basis()

};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2004, 12:50 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


äh kannst du mal sagen wo genau, bzw an welcher stelle es hakt. dann muss man sich nicht durch deinen genazen code quälen...
an sonsten kannst du für sowas z.b. einfach sscanf/sprintf oder stringstreams verweden ohne dir dabei einen abzubrechen...


Bearbeitung:

*rofl* genanzen.... ich glaub ich sollte dringend einen kurs rechtschreibung besuchen


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.11.2004 um 15:07 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.11.2004, 13:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich habe es nicht in die tiefe angeschaut, aber


Zitat von ~klfischer:
Hallo,

C++:
...
            ErgWert[zTmp1]=static_cast<char>(buffer);
...



sollte man mal durch

C++:
...
            ErgWert[zTmp1]= buffer + '0';
...


ersetzen
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.11.2004, 16:51 Uhr
~klfischer
Gast


Vielen Dank! Das klappt!

...aber...warum? wieso wird es durch die verkettung mit einer 0 korrekt ausgegeben? hat das was mit dem ASCII Wert zu tun?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.11.2004, 17:16 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja: es ist '0' != 0

'0' ist ein Zeichen, welches einen von 0 verschiedenen Zahlenwert hat. Wenn Dein Rechner ASCII Kodierung benutzt (mnache machen das nicht), dann entspricht '0' der Zahl 48, '1' der Zahlen 49 usw.

Allerdings ist die Umrechung von Zeichen in Zahlen einerseits unnötig (weil der Compiler '0' automatisch in die richtige Zahl umwandelt), andererseits unportabel und eh schlechter Stil ('0' ist viel klarer als 48)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 28.11.2004 um 17:16 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.11.2004, 14:34 Uhr
RedEagle



Nur mal so für micht:

Mit ist sowas aufgefallen: };
Was ist der Unterschied zwischen "}" und "};"??
Wann setzt man was ein??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.11.2004, 14:42 Uhr
virtual
Sexiest Bit alive
(Operator)


Das Semikolon nach "}" ist am Ende von Typdefinitionen Pflicht.
Sonst ist es wahlweise ein Fehler oder wird ignoriert (Kommt auf den Kontext an), Eine erschöpfende Antwort bietet ein C/C++ Tutorial.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: