Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zufallsfunktion..

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 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ]
010
21.03.2004, 15:51 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


erklär dochmal was du mit dem String machen willst...also ich peil zumindest überhaupt nicht was du überhaupt vorhast.

also wenn ichs richtig verstanden habe hast du dir in ner funktion einen string basteln lassen. die einzelnen buchstaben des strings wurden einfach per zufall reingeschrieben.

was soll nun mit dem string gemacht werden....
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 21.03.2004 um 15:53 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.03.2004, 16:31 Uhr
Fraenky



ich möchte in meiner Klasse CKarte die Karteninstanzen mit nem Symbol belegen, welches Zufällig bestimmt werden soll. Die funktionen der Klasse heißt:


C++:
CKarte::setzeSymbol(string sSymbol_eing)
{
sSymbol=sSymbol_eing;
};



Wie gesagt hat das mit dem Zufall geklappt und nu hab ich aber das Zufallssymbol in einem char stecken.
ich kannja nicht einfach schreiben:


C++:
string sSymbol_eing;

char cSymbol[9];
char cSymbol_1[1];

cSymbol[1]='\x01';
cSymbol[2]='\x02';
cSymbol[3]='\x03';
cSymbol[4]='\x04';
cSymbol[5]='\x05';
cSymbol[6]='\x06';
cSymbol[7]='\x0B';
cSymbol[8]='\x0C';
cSymbol[9]='\x0E';

srand(time(NULL));
zzahl=min+rand()%(max-min+1);
cSymbol_1[1]=cSymbol[zzahl];

sSymbol_eing=cSymbol_1[1];

Karte1.setzeSymbol(sSymbol_eing);



das mit dem Casten funzt auch net:


C++:
strcpy(cSymbol_1[1], sSymbol_eing.c_str());


also könnt ich ja noch die setzeSymbol() Funktion mit char belegen, was aber in C++ nicht so gut ist denk ich mal..


C++:
CKarte::setzeSymbol(char cSymbol_eing)
{
cSymbol=cSymbol_eing;
};



und nur frag ich mich was nu..

hoffe hast mich verstanden

thx!
--
Welcome to the real World.

www.fraenkysweb.de

Dieser Post wurde am 21.03.2004 um 16:32 Uhr von Fraenky editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
21.03.2004, 17:02 Uhr
Pablo
Supertux
(Operator)



Zitat:
Fraenky postete

C++:
strcpy(cSymbol_1[1], sSymbol_eing.c_str());





Das ist falsch

cSymbol_1[1] ist ein char und strcpy braucht ein char*, das kann nie funktionieren.


C++:
strcpy(cSymbol_1, sSymbol_eing.c_str());



So muss es funktionieren, vorrausgesetzt cSymbol_1 mindestens strlen(sSymbol_eing.c_str()) + 1 Zeichen aufnehmen kann.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 21.03.2004 um 17:04 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
21.03.2004, 17:24 Uhr
Fraenky



irgendwie klappts nicht..

sSymbol_eing ist leer, es wird jedenfalls nichts ausgegeben.

ähm..könntest du das mit dem Vorrausgesetzt noch mal wiederholen??

thx
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
21.03.2004, 17:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du musst deinen char-array einfach nullterminieren dann funzt das auch

deklariere cSymbol ein zeichen länger als du es brauchst und setze am ende von deiner "zufallsnummer" das letze byte auf 0

dann kannst du das chararray auch deiner setztefunktion so übergeben. das mit dem gleichsetzen wird dann auch so klappen.
wenn der in deiner setze funktion unbedingt eine std::string halben will ändere das halt in ein char* oder mach bevor du das deiner setze funktion übergibts einen tmp-string den du gleich deinem char-array setzt und übergib dann den. dann funzt das auch...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
21.03.2004, 18:39 Uhr
Fraenky



also ich mach aus cSymbol_1[1] -> cSymbol_1[2] .. ein Zeichen länger..?
hab ich schon versucht, hataber auch net geklappt..

und wie setzt ich dann den letzten byte 0?

also die setze funktion möcht ich mit string behalten..

wie ändere ich das in ein char* ?? ist das nicht so ähnlich wie casten?
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
21.03.2004, 18:40 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


oki ich progg dir das mal schnell
musst aber ca. 10 minuten warten
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
21.03.2004, 18:43 Uhr
Pablo
Supertux
(Operator)



Zitat:
Fraenky postete


wie ändere ich das in ein char* ?? ist das nicht so ähnlich wie casten?


wenn du nur ein char* hast, kannst du es nicht ändern


C++:
char* x="Halllo";
x[0]='h';



das verursacht Segmentation Fault

nein, das hat gar nicht mit casten zu tun.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
21.03.2004, 18:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
#include <iostream>
#include <string>
#include <ctime>

class CKarte{

    private:
    std::string symbol;

    public:
    CKarte(); //mitzufallswerten eine CKarte erzeugen
    CKarte(std::string);
    void setSymbol(std::string);
    void Karte_ausgeben();

};

void CKarte::setSymbol(std::string symbol){this->symbol=symbol;}

CKarte::CKarte(){

    int min=65;
    int max=65+32;
    char cSymbol[10];
    srand(time(NULL));

    for(int i=0;i<9;++i)
        cSymbol[i]=min+rand()%(max-min+1);

    cSymbol[9]=0;

    this->symbol=cSymbol;
    //schlauer wäre es einfach die concatenation von std::string zu verwenden aber du wolltest es ja mit char* machen...
}

CKarte::CKarte(std::string symbol){setSymbol(symbol);}

void CKarte::Karte_ausgeben(){std::cout<<symbol<<std::endl;}

int main(){

    CKarte Karte1;
    CKarte Karte2("hallo");
    Karte1.Karte_ausgeben();
    Karte2.Karte_ausgeben();
    Karte1.setSymbol("jetzt steht das hier in karte 1");
    Karte1.Karte_ausgeben();
    
}


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

Dieser Post wurde am 21.03.2004 um 19:07 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
21.03.2004, 20:00 Uhr
~gast
Gast



Zitat:
Fraenky postete

C++:
string sSymbol_eing;

char cSymbol[9];
char cSymbol_1[1];



.....



srand(time(NULL));
zzahl=min+rand()%(max-min+1);
cSymbol_1[1]=cSymbol[zzahl];

sSymbol_eing=cSymbol_1[1];

Karte1.setzeSymbol(sSymbol_eing);





Kuck dir erstmal an wo du deine werte ablegsst sieht doch nach ner deutlichen array überschreitung aus.
Du legst Werte in cSymbol_1[1]
obwohl du nur eine array größe con 1 hast also
cSymbol_1[0]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ]     [ 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: