Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++/CLI mit .NET ::  Hilfe bei C++ rand() und srand()  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Yuto
Unregistrierter




Beitrag Yuto Unregistrierter 19:30:40 11.01.2018   Titel:   Hilfe bei C++ rand() und srand()            Zitieren

Hallo,
erstmal vorneweg ich bin neu bei programmiersprache C++ davor habe ich Java programmiert.
Nun zu meiner Frage ich will bei C++ ein Array mit random zahlen füllen und dann ausgeben.
Das problem ist wennn ich mein projekt starte wird zwar eine array ausgegeben aber nach wiederholtem ausführen der random funktion bleibt die random zahl gleich ich weis das ich um das zu vermeiden das hier benutzen muss:
C++/CLI:
srand((unsigned)time(0));


das problem ist das wenn ich das verwende nix passiert hier ein screenshort:
https://i.stack.imgur.com/Orxk0.png

Ich hoffe jemand kann mir helfen ich weis echt nicht weiter :( warscheinlich ist es irgendein dummer anfänger fehler ich hoffe ihr verzeiht das mir falls es so ist :D
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4773
Beitrag Th69 Mitglied 10:30:02 12.01.2018   Titel:              Zitieren

Du gibst nicht die Zufallszahl aus, sondern die Adresse des Arrays!
->
C++:
std::cout << name[i]; // innerhalb der Schleife


Edit:
Da du ja anscheinend Zufallsnamen erzeugen möchtest, solltest du auch den passenden Datentyp 'string' verwenden:
C++:
1
2
3
4
5
6
7
8
9
string createRandomName()
{
  string name;
 
  for (int i=1; i < 5; i++)
    name += (char)('a' + rand() % ('z'-'a'+1));
 
  return name;
}


Und bitte Code hier direkt einfügen (mit Code-Tags), keine externen Bilder.

PS: Falsches Unterforum.


Zuletzt bearbeitet von Th69 am 11:04:16 12.01.2018, insgesamt 3-mal bearbeitet
Yuto
Unregistrierter




Beitrag Yuto Unregistrierter 14:32:55 12.01.2018   Titel:              Zitieren

okay danke dir, ja das war teilweise Fehler. Wobei der Fehler immer noch besteht trotz benutzen der
C++:
srand()
funktion(wie du auf dem Foto siehst) die random namen gleich bleiben.
Und würdest du mir erklären falls es dir nichts ausmacht warum ich so die adresse ausgebe:
C++:
std::cout << name[i]; //außerhalb der schleife


und so:
C++:
std::cout << name[i]; // innerhalb der Schleife


die value von der Adresse ausgebe. Das ist mir irgendwie nicht ganz ersichtlich :confused:

Ich dachte wenn man die Adresse einer Value ausgeben will macht man immer das:
C++:
 std::cout << &name; // innerhalb der Schleife


also mit dem
C:
&  
operator. :confused:
inflames2k
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.06.2009
Beiträge: 1529
Beitrag inflames2k Mitglied 14:40:06 12.01.2018   Titel:              Zitieren

Du verhaust hier gerade etwas.

C++:
std::cout << name[i];


Außerhalb der Schleife führt das Zwangsläufig zu einem Fehler. Er bezog sich darauf, dass du quasi "name" und nicht "name[n]" ausgibst.

Du hast also 5 Elemente im Array. - Greifst aber auf keines davon zu, sondern gibst das Array (die Adresse dessen) aus.


Zuletzt bearbeitet von inflames2k am 14:41:26 12.01.2018, insgesamt 1-mal bearbeitet
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4773
Beitrag Th69 Mitglied 15:33:29 12.01.2018   Titel:              Zitieren

Bei einem Array ist der Zugriff mittels des Namens dasselbe wie "&arrayname[0]", d.h.
C++:
std::cout << name;
sowie
C++:
std::cout << &name[0];

geben dieselbe Adresse aus.
Yuto
Unregistrierter




Beitrag Yuto Unregistrierter 17:39:49 12.01.2018   Titel:              Zitieren

Danke dir @Th69 das wusste ich nicht.

und zu @inflames2k ich weis das er sich darauf bezogen hat. Da habe ich mich in meinem davohrige beitrag wohl etwas schlecht ausgedrückt trotzdem danke.

Falls jemand weiß warum mein random array(mitlerweile string wie @Th69 vorgeschlagen hat) den gleichen array(string) aus gibt würde ich es gerne wissen :D
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4773
Beitrag Th69 Mitglied 10:16:38 13.01.2018   Titel:              Zitieren

Dann poste deinen aktuellen Code hier direkt im Forum (mit C++-Tags).

PS: Kann ein Mod diesen Thread ins "C++"-Forum verschieben?


Zuletzt bearbeitet von Th69 am 10:17:23 13.01.2018, insgesamt 1-mal bearbeitet
Yuto
Unregistrierter




Beitrag Yuto Unregistrierter 16:11:11 13.01.2018   Titel:              Zitieren

okay danke hier ist der volle projektcode.
C++/CLI:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// AssaultCubeWithClr.cpp: Hauptprojektdatei.

 
#include "stdafx.h"

 
using namespace System;
 
class variabeln
{
    public:
        DWORD clientAddress = 0x400000;
        DWORD playerBaseAdress = 0x00509b74;
        DWORD offsePrimaryAmmo = 0x128;
        DWORD offsetPistolAmmo = 0x13C;
        DWORD offsetArmor = 0xFC;
        DWORD offsetHealth = 0xF8;
        DWORD offsetRoll = 0x0080;
        //DWORD baseforName = 0x005028FC;
        DWORD baseforName = 0x51019C;
        DWORD teamNum1 = 0x204;
        DWORD teamNum2 = 0x32C;
        DWORD playerVertical = 0x44;
        DWORD playerHorizontal = 0x40;
 
        int inputCheat;
        int inputNumber;
        DWORD processId;
        DWORD localPlayer;
        DWORD localName;
        DWORD primaryAmmo;
        DWORD pistolAmmo;
        DWORD health;
        DWORD armor;
        DWORD roll;
 
        bool firstSetRand = true;
        bool firstExecute = true;
};
 
struct InitRandHelper
{
    InitRandHelper() { srand((unsigned)time(0)); }
};
   
std::string randomName()
    {
    static InitRandHelper init;
 
    int i = 1;
    static std::string name;
    for (int i = 1; i < 5; i++)
        {
            name += (char)('a' + rand() % ('z' - 'a' + 1));
            std::cout << name[i] << std::endl;
        }
        return name;
    }
 
void StartText()
{
    //Text to See in the Console
    Console::ForegroundColor = System::ConsoleColor::Green;
    Console::WriteLine("Welcome to my Cheat for AssaultCube!");
    Console::WriteLine("------------------------------------");
    Console::WriteLine("1. For More Health type in: 1.");
    Console::WriteLine("2. For More Ammo type in: 2");
    Console::WriteLine("3. For More Armor type in: 3");
    Console::WriteLine("4. For Turn on Name changer: 4");
}
int main(array<System::String ^> ^args)
{
    //create new object with variabeln
    variabeln varobj;
 
    HWND hwnd = FindWindowA(NULL, "AssaultCube");       //Find Window with Name AssaultCube
 
    StartText();        //function call
    while (true)
    {
 
        if (hwnd == NULL)   //Check if the game exists
        {
            if (varobj.firstExecute == true)
            {
                Console::ForegroundColor = System::ConsoleColor::Red;
                Console::WriteLine("ERROR: The Game couldn´t found!");
                varobj.firstExecute = false;
            }
        }
        else
        {
            GetWindowThreadProcessId(hwnd, &varobj.processId);      //Get Process id from the Window
            HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, varobj.processId);
 
            if (handle == NULL) //check if process id exsits
            {
                Console::ForegroundColor = System::ConsoleColor::Red;
                Console::WriteLine("ERROR: Wrong Process Id!");
                Console::ForegroundColor = System::ConsoleColor::Green;
            }
            else
            {
                ReadProcessMemory(handle, (LPCVOID)varobj.playerBaseAdress, &varobj.localPlayer, sizeof(varobj.playerBaseAdress), NULL); //Read the local adresse and save it in localPlayer
                ReadProcessMemory(handle, (LPCVOID)varobj.baseforName, &varobj.localName, sizeof(varobj.playerBaseAdress), NULL);
 
                varobj.primaryAmmo = varobj.localPlayer + varobj.offsePrimaryAmmo;
                varobj.pistolAmmo = varobj.localPlayer + varobj.offsetPistolAmmo;
                varobj.health = varobj.localPlayer + varobj.offsetHealth;
                varobj.armor = varobj.localPlayer + varobj.offsetArmor;
                varobj.roll = varobj.localPlayer + varobj.offsetRoll;
 
                std::cin >> varobj.inputCheat;      //wait for user input
 
                switch (varobj.inputCheat)          //check which case match with the user input
                {
                    case 1:
                        Console::WriteLine("Write how much Health you want: ");
                        std::cin >> varobj.inputNumber;
                        WriteProcessMemory(handle, (LPVOID)varobj.health, &varobj.inputNumber, sizeof(varobj.inputNumber), NULL); //Write to the local adress memory and change the value
                        Console::WriteLine("\nWhat did you want to cheat up: ");
                        break;
 
                    case 2:
                        Console::WriteLine("Write how much Ammo you want: ");
                        std::cin >> varobj.inputNumber;
                        WriteProcessMemory(handle, (LPVOID)varobj.primaryAmmo, &varobj.inputNumber, sizeof(varobj.inputNumber), NULL); //Write to the local adress memory and change the value
                        Console::WriteLine("\nWhat did you want to cheat up: ");
                        break;
 
                    case 3:
                        Console::WriteLine("Write how much Armor you want: ");
                        std::cin >> varobj.inputNumber;
                        WriteProcessMemory(handle, (LPVOID)varobj.armor, &varobj.inputNumber, sizeof(varobj.inputNumber), NULL); //Write to the local adress memory and change the value
                        Console::WriteLine("\nWhat did you want to cheat up: ");
                        break;
 
                    case 4:
                        Console::WriteLine("Random Number: ");
                        WriteProcessMemory(handle, (LPVOID)varobj.localName, &randomName(), sizeof(randomName()), NULL); //Write to the local adress memory and change the value
                        Console::WriteLine("\nWhat did you want to cheat up: ");
                        break;
 
                    case 5:
                        Console::WriteLine("test: ");
                        std::cin >> varobj.inputNumber;
                        WriteProcessMemory(handle, (LPVOID)varobj.roll, &varobj.inputNumber, sizeof(varobj.inputNumber), NULL); //Write to the local adress memory and change the value
                        Console::WriteLine("\nWhat did you want to cheat up: ");
                        break;
 
                    default:
                        Console::ForegroundColor = System::ConsoleColor::Red;
                        Console::WriteLine("ERROR: Wrong Entry!");
                        Console::WriteLine("Try a other input :D");
                        Console::ForegroundColor = System::ConsoleColor::Green;
                        break;
                }
            }
        }
        Sleep(200);
    }
    return 0;
}
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4773
Beitrag Th69 Mitglied 11:18:39 14.01.2018   Titel:              Zitieren

Du benutzt ja doch C++/CLI, aber das solltest du wirklich sein lassen und natives C++ verwenden (d.h. ein Win32-Konsolenprojekt im VS erzeugen).
Du mischst in deinem Code bisher die WinAPI, C++-Standard als auch .NET - das wird auf Dauer nur Probleme machen...

Entferne das 'static' bei 'std::string name'.

Außerdem ist der Aufruf in Zeile 139
C++:
WriteProcessMemory(handle, (LPVOID)varobj.localName, &randomName(), sizeof(randomName()), NULL); //Write to the local adress memory and change the value
völlig falsch!

Ich schreibe dir jetzt extra nicht sofort die Lösung hin, damit du ein bißchen darüber nachdenkst und recherchierst...
Yuto
Unregistrierter




Beitrag Yuto Unregistrierter 14:16:01 14.01.2018   Titel:              Zitieren

@Th69 okay vielen dank für die Antwort ich werde mal etwas rumexperimentieren und versuchen es rauszukriekgen :live:
C++ Forum :: C++/CLI mit .NET ::  Hilfe bei C++ rand() und srand()  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.