|
You last visited: Today at 06:13
Advertisement
C atoi/srand/rand to C++
Discussion on C atoi/srand/rand to C++ within the C/C++ forum part of the Coders Den category.
11/06/2012, 09:12
|
#1
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
|
C atoi/srand/rand to C++
Code:
#include <iostream>
#include <Windows.h>
#include <time.h>
#include <sstream>
struct PlayerStr
{
int Health;
int Damage;
int UID;
int Honor;
std::string Look;
int Gender;
int Race;
int Class;
std::string Name;
int Level;
int MinimalDamage;
int MaximalDamage;
int MainAttribute;
};PlayerStr Player;
struct EnemyStr
{
int Health;
int Damage;
int UID;
int Honor;
std::string Look;
int Gender;
int Race;
int Class;
std::string Name;
int Level;
int MinimalDamage;
int MaximalDamage;
int MainAttribute;
};EnemyStr Enemy;
int main(int args,char *argv[])
{
std::string FinalPacket = argv[1];
Player.Health = atoi(argv[2]);
Enemy.Health = atoi(argv[3]);
Player.Damage = atoi(argv[4]);
Enemy.Damage = atoi(argv[5]);
Player.UID = atoi(argv[6]);
Player.Honor = atoi(argv[7]);
Enemy.UID = atoi(argv[8]);
Enemy.Honor = atoi(argv[9]);
Player.Look = argv[10];
Player.Gender = atoi(argv[11]);
Player.Class = atoi(argv[12]);
Player.Race = atoi(argv[13]);
Player.Name = argv[14];
Enemy.Look = argv[15];
Enemy.Gender = atoi(argv[16]);
Enemy.Race = atoi(argv[17]);
Enemy.Class = atoi(argv[18]);
Enemy.Name = argv[19];
Player.Level = atoi(argv[20]);
Enemy.Level = atoi(argv[21]);
Player.MinimalDamage = atoi(argv[22]);
Player.MaximalDamage = atoi(argv[23]);
Enemy.MinimalDamage = atoi(argv[24]);
Enemy.MaximalDamage = atoi(argv[25]);
Player.MainAttribute = atoi(argv[26]);
Enemy.MainAttribute = atoi(argv[27]);
std::stringstream s;
s << FinalPacket;
int luckone = 0;
Sleep(500); // Damit der rand wert auch unterschiedlich ist
srand ( static_cast<unsigned int >(time(NULL)) );
luckone = rand() % (5 + 1);
}
Gibt es in C++ eine bessere alternative als atoi?
und alternativen zu srand / rand wären auch gut zu wissen
|
|
|
11/06/2012, 14:27
|
#2
|
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
|
Soweit ich weiß, gibt es keine direkte alternative zu atoi.
Aber in C++ lässt sich das ganze per std::stringstream lösen.
Code:
int ConvertToInt(std::string s)
{
int convert;
std::stringstream ss(s)
ss >> convert;
return convert;
}
Edit: Bezüglich einer srand/rand C++ alternative schau mal in die Boost Library.
|
|
|
11/06/2012, 15:27
|
#3
|
elite*gold: 0
Join Date: Oct 2012
Posts: 8
Received Thanks: 5
|
Nur eine eigene funktion, eine random funktion könntest du hinbekommen mit einem Algorithmus. Eine funktion für atoi ist nicht nötig, da diese funktion schon die kürzeste version ist die man benutzen kann.
|
|
|
11/06/2012, 19:16
|
#4
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
|
@Trollface Danke für die Antwort dass mit std::stringstream wusste auch leider schon, dachte nur da gibt es noch eine andre Möglichkeit .
hm boost library muss ich mir nochmal downloaden dann wohl :P
@Farmär das kürzeste ist aber nicht immer das beste! Was ich dort geschrieben habe ist für ein Online Spiel d.h muss es GENAU und SCHNELL sein .
und rand funktionert halt nunmal nur mit blöden Sleeps ~.~
|
|
|
11/07/2012, 14:00
|
#5
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by bloodx
@Trollface Danke für die Antwort dass mit std::stringstream wusste auch leider schon, dachte nur da gibt es noch eine andre Möglichkeit .
hm boost library muss ich mir nochmal downloaden dann wohl :P
@Farmär das kürzeste ist aber nicht immer das beste! Was ich dort geschrieben habe ist für ein Online Spiel d.h muss es GENAU und SCHNELL sein .
und rand funktionert halt nunmal nur mit blöden Sleeps ~.~
|
eine andere möglichkeit zu std::stringstream wäre speziell für diesen fall boost::lexical_cast (wenn du dir die lib sowieso saugst)
|
|
|
11/07/2012, 14:50
|
#6
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
|
Darüber habe ich auch schon etwas gelesen danke dir
jetzt bräuchte ich nur ne alternative für rand() halt weil Sleeps sind ja total doof!
|
|
|
11/07/2012, 15:28
|
#7
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by bloodx
Darüber habe ich auch schon etwas gelesen danke dir
jetzt bräuchte ich nur ne alternative für rand() halt weil Sleeps sind ja total doof!
|
du benutzt rand nur falsch.
du musst einmal srand, also den seed mit time(NULL) initialisieren.
danach rufst du immer nur noch rand auf.
wenn du jedes mal srand aufrufst, wird der seed wieder neu gesetzt (ändert sich bei time(NULL) einmal pro sekunde), und die rand abfolge fängt wieder von vorne an.
|
|
|
11/07/2012, 16:24
|
#8
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by Dr. Coxxy
du benutzt rand nur falsch.
du musst einmal srand, also den seed mit time(NULL) initialisieren.
danach rufst du immer nur noch rand auf.
wenn du jedes mal srand aufrufst, wird der seed wieder neu gesetzt (ändert sich bei time(NULL) einmal pro sekunde), und die rand abfolge fängt wieder von vorne an.
|
example:
Code:
srand(time(nullptr));
for(uint32_t i = 0; i < 10; ++i)
std::cout << rand()%101 << "%" << std::endl;
würde z.b. das ausgeben:
Code:
45%
13%
10%
84%
0%
99%
32%
29%
9%
70%
|
|
|
11/08/2012, 02:08
|
#9
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
|
oh weia dat tut weh -.- Danke euch !
|
|
|
11/08/2012, 10:09
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Für C: strtol ist atoi afaik sogar vorzuziehen.
Warum genau schreibst du in deiner Schleife % (5+1)?
Schreib doch gleich % 6.
Ich vermute mal, du willst eine Zahl zwischen 1 und 6 haben. Das macht man so:
Code:
int i = rand() % 5 + 1;
Btw. wieso sollte man für unterschiedliche Zahlen Sleep brauchen? Ist die Zeit API nicht eigentlich genau genug, dass in den zwei Durchgängen unterschiedliche Timestamps und damit auch Seeds rauskommen, was trotzdem zu einer anderen Zahl am Anfang führen müsste?
|
|
|
11/08/2012, 11:44
|
#11
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by MrSm!th
Für C: strtol ist atoi afaik sogar vorzuziehen.
Warum genau schreibst du in deiner Schleife % (5+1)?
Schreib doch gleich % 6.
Ich vermute mal, du willst eine Zahl zwischen 1 und 6 haben. Das macht man so:
Code:
int i = rand() % 5 + 1;
Btw. wieso sollte man für unterschiedliche Zahlen Sleep brauchen? Ist die Zeit API nicht eigentlich genau genug, dass in den zwei Durchgängen unterschiedliche Timestamps und damit auch Seeds rauskommen, was trotzdem zu einer anderen Zahl am Anfang führen müsste?
|
timestamps liefern nur sekunden (was ich daraus schliesse, dass die sich auch nur jede sekunde ändern)
in c++ würde ich jedenfalls zu chrono greifen
|
|
|
11/08/2012, 15:55
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Ok dachte eigentlich die liefern Millisekunden.
Naja gut, mal rein theoretisch gedacht sollte es dann aber mit dem Tick Counter der CPU oder der Millisekunden genauen System Uhr gehen :P (kann sein, dass ich mich da irre, aber ich meine sogar eine Api Funktion mit Nanosekunden Genauigkeit gesehen zu haben)
|
|
|
11/08/2012, 16:01
|
#13
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by MrSm!th
Ok dachte eigentlich die liefern Millisekunden.
Naja gut, mal rein theoretisch gedacht sollte es dann aber mit dem Tick Counter der CPU oder der Millisekunden genauen System Uhr gehen :P (kann sein, dass ich mich da irre, aber ich meine sogar eine Api Funktion mit Nanosekunden Genauigkeit gesehen zu haben)
|
|
|
|
11/08/2012, 17:29
|
#14
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by Dr. Coxxy
|
das wäre eine option, allerdings muss man da auch die frequenz des prozessors beachten!
zusätzlich wäre die reine c++ variante cross platform!
kleines sample, sieht dem original sehr ähnlich (is übrigens nur auf die schnelle geschrieben) ( )
Code:
std::chrono::high_resolution_clock::time_point timeBegin;
std::chrono::high_resolution_clock::time_point timeEnd;
std::chrono::duration<double> timeValue;
timeBegin = std::chrono::high_resolution_clock::now();
for(uint32_t i = 0; i < 10; ++i)
std::cout << "FAP ";
timeEnd = std::chrono::high_resolution_clock::now();
timeValue = std::chrono::duration_cast<std::chrono::duration<double> >(timeEnd-timeBegin);
std::cout << std::endl << "Fapped " << timeValue << " seconds!" << std::endl;
|
|
|
11/08/2012, 17:37
|
#15
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by HeavyHacker
Code:
std::chrono::high_resolution_clock::time_point timeBegin;
std::chrono::high_resolution_clock::time_point timeEnd;
std::chrono::duration<double> timeValue;
timeBegin = std::chrono::high_resolution_clock::now();
for(uint32_t i = 0; i < 10; ++i)
std::cout << "FAP ";
timeEnd = std::chrono::high_resolution_clock::now();
timeValue = std::chrono::duration_cast<std::chrono::duration<double> >(timeEnd-timeBegin);
std::cout << std::endl << "Fapped " << timeValue << " seconds!" << std::endl;
|
iih also wirklich, doch nicht hier öffentlich im forum ^^
Die frequenz ist unerheblich, da das ganze ja nur als srand init value benutzt werden sollte.
Wenn man nen timer machen will, muss man natürlich die frequenz beachten.
|
|
|
|
|
Similar Threads
|
[CF]Vollbild mit rand
07/15/2012 - CrossFire - 8 Replies
Hey leute,
ich habe nun wieder ein neues problem und zwar habe ich bei 1680x1050 immer schwarze ränder auch wenn ich es so aufem desktop einstelle hoffe ihr könnt mir helfen.
Mfg tunertotal
|
Rand abrunden
04/17/2011 - General Art - 12 Replies
Hallo. Ich habe Photoshop Cs5.
Ich will grad bei ner Signatur die kanten abrunden.
Kann mir einer erklären wie das geht?
In google hab ich zwar erklärungen gefunden, diese waren aber zu schwer.
Hoffe das kann mir jemand leicht erklären.
Danke.
|
Schwarzer Rand in 1.6
04/13/2011 - Counter-Strike - 5 Replies
Hey, habe mir gestern 1.6 auf meinen Laptop geladen & auch gleich gestartet.
Nur wenn ich Ingame bin habe ich links & rechts einen schwarzen Rand.
Ein Kumpel meinte dieser nennt sich "schwedischer Rand" weiß jemand wie ich diesen weg bekomme?
|
Rand Hack
06/19/2010 - World of Warcraft - 2 Replies
Salut
Je cherche un hack pour faire de magnifique randown pour drop des objet voillaaa merci de me laisser de reponse
|
3D Rand
03/13/2006 - General Art - 3 Replies
Damit ich meine diesen Rand hier:
http://mitglied.lycos.de/gehtsnochoderwas/ps/Xant us2.png
Hier arbeite ich gerne mit Grid Showing
http://mitglied.lycos.de/gehtsnochoderwas/tut/ran d/1.jpg
Neuen Layer erstellen und los gehts.
|
All times are GMT +2. The time now is 06:13.
|
|