Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

11

13.08.2007, 14:49

Noch schöner:

C-/C++-Quelltext

1
std::rand() % 25 + 'A'


Und noch schöner:

C-/C++-Quelltext

1
2
3
static const char* lut = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// ...

... : lut[ std::rand() % 25 ]


:)
@D13_Dreinig

12

13.08.2007, 15:01

Stimmt ;) Hätte auch einfach 'A' dazu addieren können ^^ Bin schon nen Depp :D

C-/C++-Quelltext

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
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <fstream>

void generate_password(const std::string&, std::size_t, std::string&);

int main ()
{
    std::srand(std::time(0));
    bool close = false;
    while (close == false)
    {
        std::cout   << "Password Generator V1.0BETA\n"
                    << "Copyright (c) 2007 Devil Entertainment\n"
                    << "--------------------------------------\n"
                    << "\t(0) Password generieren\n"
                    << "\t(1) Beenden" << std::endl;

        while (!(std::cin >> close)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
        if (close == false)
        {
            std::cout << "Laenge: ";
            std::size_t len = 0;
            while (!(std::cin >> len)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
            std::string password;
            generate_password("config.dat", len, password);
            std::cout << "Passwort: " << password << std::endl;
        }
    }
} 

void generate_password(const std::string& config_file, std::size_t len, std::string& pass)
{
    pass = "";
    std::ifstream file_stream(config_file.c_str(), std::ios::in);
    if (!file_stream)
        throw std::runtime_error(std::string("File does not exist! => ") + config_file);

    std::vector<char> static_values;
    char val = 0;
    while ((file_stream >> val))
        static_values.push_back(val);

    for (std::size_t i = 0; i < len; ++i)
        pass[i] = (i % 2 ? static_values[i % static_values.size()] : std::rand() % 25 + 'A' /* 65 - 90 == Großbuchstaben! */);
}
--- einmal aufgeräumt ---
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

13

13.08.2007, 18:33

omfg...

compilier du mal deinen code...

da war ich sogar besser xDD hatte nur 5fehler und 0warnungne und du hast gleich 20 fehler und 0 warnungen....

14

13.08.2007, 20:29

Hmm ... 0 Fehler 0 Warnungen
Solltest aber ne config.dat haben ... sonnst gebekommst du die gewollte exception ... ich werf se ja extra deswegen?!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void generate_password(const std::string& config_file, std::size_t len, std::string& pass)
{
    pass = std::string('*', len);
    std::vector<char> static_values;
    std::ifstream file_stream(config_file.c_str(), std::ios::in);
    if (file_stream)
    {
        char val = 0;
        while ((file_stream >> val))
            static_values.push_back(val);
    }
    if (static_values.size() != 0)
        for (std::size_t i = 0; i < len; ++i)
            pass[i] = (i % 2 ? static_values[i % static_values.size()] : std::rand() % 25 + 'A');
    else
        for (std::size_t i = 0; i < len; ++i)
            pass[i] = (i % 2 ? std::rand() % 10 + '0' : std::rand() % 25 + 'A');
}
... dann generiert der die, falls der die Datei nicht öffnen kann, anstatt mit den Zeichen aus der Datei ein Password mit Zahlen an jeder 2. Stelle ...
aja ...
config.dat

Quellcode

1
aeiouAEIOU1368
... sollte doch gehen?!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

15

13.08.2007, 21:26

ich weise andere leute ja net gerne zurecht, aber da es nunmal mein verdienst ist, dass er jetzt auch noch system aufrufe macht, muss ich das wohl tun:

An den herrn Tod ganz persöhnlich: Lerne erst C++, bevor du mit so sachen wie goto ankommst.
Es war in dem thread damals falsch von mir, dir zu sagen, dass man eventuell goto verwenden könnte(oder eben schlefien) und dann hat david es dir auch noch vorgecodet.(Nichts gegen davids code...)

So: also lerne besser erst C++, denn du machst dich hier gerade etwas zum affen.(Jedenfalls sieht es für mich dannach aus.)
Und du willst doch nicht der neue Clown aus dem forum werden oder?!

@all die anderen:
Kommt ihr euch net komisch vor, wenn ihr ihm alles vorcodet?
Stellt euch mal vor der verdient jetzt geld damit(naja wenn ihm das programm jemand abnimmt, der ein wenig ahnung hat, dann fresse ich einen Besen - mit Stiel).

Also DEATH: lerne bitte erst C++. du ersprast dir damit ne menge. und wenn es damit ein problem gibt, kannst du das hier posten!
Wenn du das dann kannst, kannst du dich über verschlüsselungsalgos o.ä. informieren, und dein programm so lange zur seite legen.

PS: goto ist nicht genial, sondern diejenigen die es benutzen, sind entweder verrückt, oder genial(Bei dir wohl das erstere).

nochmal PS: Ich werde nicht nochmal den fehler machen dir alles vorzucoden(siehe der andere thread), da du eine mehr oder weniger saubere lösung(ausser wie gesagt der system aufruf) von mir ja sowieso ignoriert hast(und das obwohl du einfach noch deine codeschnipsel einsetzen musstest) und der code ja sowzusagen idiotensicher ist.
Das goto einfacher zu verstehen ist wie schleifen mag schon sein, aber erstens ist es nicht sicher, und 2. wäre das ja der reitz mir schleifen anzueignen.

Ich hoffe der thread landet net im papierkorb, ich wollte dir damit nur einen tipp fürs leben geben.

Socke

16

14.08.2007, 09:20

jo thx

hab auch eine andere lösung gefunden wie ich mein prob mim code lösen kann/könnte...

Ich kann leider nicht viel C++, versteh auch deshalb eure codes nur bis zu 10% (und das ist recht viel für mich :P)

hab zwar jetzt haufenweise neue fragen zu euren geposteten codes, aber die lass ich mal lieber :D

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

17

14.08.2007, 11:52

Es ist nicht so, dass du keine Fragen stellen darfst. Nur solltest du eben C++ in einem gewissen Maße können.
Nimm dir ein gutes Buch, Zeit und lerne C++, dann wird man dir später hier im Forum auch besser helfen können.
Keiner hat was gegen Fragen, aber Grunkenntnisse sollten vorhanden sein.

Wie schaut der Code denn jetzt aus(ohne goto?) ;)

18

14.08.2007, 15:48

Nimm meinen Code und versuch den zu verstehen ... bei Fragen ... stellen!

C-/C++-Quelltext

1
while (!(std::cin >> close)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } 
ist glaube ich für einen Anfänger recht merkwürdig wenn nicht gar vollkommen unverständlich ...
std::cin >> close ... ist ja klar, oder? Was ist aber wenn das nicht geht? Wenn es garkein bool ist?
Gucken was der Operator void* sagt :D http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html
Da der Zeiger ja dann NULL ist, falls was falsches eingegeben wurde, ist also ein badbit oder ein failbit gesetzt ... das müssen wir zurücksetzen damit wir wieder was einlesen können. Das macht clear http://www.cplusplus.com/reference/iostream/ios/clear.html . Dann soll noch alles was im Stream ist uns nicht mehr interessieren: http://www.cplusplus.com/reference/iostream/istream/ignore.html :)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

14.08.2007, 17:51

Zitat von »"Deviloper"«


std::cin >> close ... ist ja klar, oder? Was ist aber wenn das nicht geht? Wenn es garkein bool ist?
Gucken was der Operator void* sagt :D http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html
Da der Zeiger ja dann NULL ist, falls was falsches eingegeben wurde, ist also ein badbit oder ein failbit gesetzt ...


Hier handelt es sich eher um den für std::ios überladenen Operator ! der zum Zuge kommt.

Zitat von »"Deviloper"«


das müssen wir zurücksetzen damit wir wieder was einlesen können.


Und auch das wir überhaupt irgend eine Aktion mit dem Stream machen können.

Zitat von »"Deviloper"«


Das macht clear http://www.cplusplus.com/reference/iostream/ios/clear.html . Dann soll noch alles was im Stream ist uns nicht mehr interessieren: http://www.cplusplus.com/reference/iostream/istream/ignore.html :)


Nicht zwangsläufig alles. Entweder bis zu einem Zeilenumbruch (\n) oder alles. ;)
@D13_Dreinig

Werbeanzeige