Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Passwort abfrage auch mit Buchstaben möglich?

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
05.10.2004, 11:50 Uhr
knock_off



Tach!

Hab ein Programm geschrieben, wo man eine zahl als passwort eingibt, und
nacher wird das passwort also die zahl wieder abgefragt, wenn man das falsche passwort eingibt kommt die meldung falsch, das geschieht so oft bis man das passwort richtig eingibt!

Meine Frage:

Wenn ich jetzt einen Buchstaben wie b,d,h B eingebe , wird der cout text unendlich lang ausgegeben, wie mache ich das das ich nicht nur zahlen sondern auch buchstaben verwenden kann, irgendwie mit char?

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.10.2004, 12:20 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Ich nehme mal an, Du liest die Zahlen mit einem solchen Konstrukt ein:


C++:
int eingabe, passwort;

cin >> passwort;

while(!eingabe == passwort)
   cin >> eingabe;



Probiers mal so:


C++:
string eingabe, passwort;

cin >> passwort;

while(!eingabe == passwort)
   cin >> eingabe;


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.10.2004, 12:33 Uhr
knock_off



Nein ein klein wenig anders:

int zahl,passwort;

cout ...
cin >> zahl;
cout ...
cout ...

cin >> passwort;

while(zahl!=passwort)
{
cout ....
cin >> passwort
}

......

So in der art, ich hoffe das ist verständlich!

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.10.2004, 13:03 Uhr
(un)wissender
Niveauwart


Das Problem ist, dass cin eine Zahl erwartet und du aber einen Buchstaben eingibst.
Wenn du schreibst

C++:
if(std::cin.fail()) //Fehler aufgetreten?
{
  std::cin.clear(); //Fehlerflag löschen
  std::getline(std::cin, buffer); //wobei Buffer ein String ist //std::cin leeren
}


kannst du dann deine while-Schleife fortsetzen, oder etwas mit std::cout ausgeben.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.10.2004, 13:14 Uhr
DerSchwarzeSchlumpf




Zitat von knock_off:
Nein ein klein wenig anders:

int zahl,passwort;

cout ...
cin >> zahl;
cout ...
cout ...

cin >> passwort;

while(zahl!=passwort)
{
cout ....
cin >> passwort
}

......

So in der art, ich hoffe das ist verständlich!

MFG



hi

ok, klare sache. gehn wir mal ganz logisch vor.

du hast für "zahl" und "passwort" einen int, also genau eine zahl.

wenn du das ganze mit "char" machen würdest (also char buchstabe, passowrt) hättest du genau genügend platz für einein einzigen buchstaben (j zum Beispiel).

wenn du aber willst, dass du eine buchstabenkette (also ein normales wort ) als passwort verwendest, hast du zwei möglichkeiten.

entweder du machst es mit einem char* (Char-Array, also eine ansammlung von einzelnen Buchstaben, für die du vorher aber speicher reserviern musst), oder aber du nimmst den einfachen weg und machst es mit "string" (wie bruder leif schon geschriebn hat).

der vorteil von string ist, dass du dich bei der speicherreservierung (fallst das noch nie gehört hast einfach mal schnell in nem c++-buch nachschaun *g*) um nichts kümmern musst. du liest ganz normal eine belieb lange Zeichen/Wortkette ein und kannst dann bei strings ganz einfach per == vergleichen ob sie nun gleich sind oder nicht.

hab dir hier mal ein kleines programm hingehackt


C++:
#include <iostream>
#include "windows.h"
#include <string>

using namespace std;
using std::cout;
using std::endl;

int main()
{
  string passwort, eingabe; // meine 2 strings

  passwort = "Mein 1. Passwort"; //ich sag ihm hier, was ich als passwort will. der vorteil hier ist, dass du buchstaben, zahlen, sonderzeichen und auch leertasten eingeben kannst

  cout << "gib mal bitte das Pw ein> ";

  getline(cin, eingabe, '\n'); //wenn du es mit getline einliest, kannst du auch leertasten miteinlesen. das '\n' ist das zeichen für zeilenumbruch und bedeutet, dass solange eingelesen wird bis du enter drückst

  while(passwort != eingabe)
  {
    cout << "probier's noch einmal> ";
    getline(cin, eingabe, '\n');
  }

  cout << "Super! ;)";  

  system("Pause");

  return(-1);
}


Dieser Post wurde am 05.10.2004 um 13:17 Uhr von DerSchwarzeSchlumpf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.10.2004, 13:21 Uhr
knock_off




Zitat von DerSchwarzeSchlumpf:

C++:
#include <iostream>
#include "windows.h"
#include <string>

using namespace std;
using std::cout;
using std::endl;

int main()
{
  string passwort, eingabe; // meine 2 strings

  passwort = "Mein 1. Passwort"; //ich sag ihm hier, was ich als passwort will. der vorteil hier ist, dass du buchstaben, zahlen, sonderzeichen und auch leertasten eingeben kannst

  cout << "gib mal bitte das Pw ein> ";

  getline(cin, eingabe, '\n'); //wenn du es mit getline einliest, kannst du auch leertasten miteinlesen. das '\n' ist das zeichen für zeilenumbruch und bedeutet, dass solange eingelesen wird bis du enter drückst

  while(passwort != eingabe)
  {
    cout << "probier's noch einmal> ";
    getline(cin, eingabe, '\n');
  }

  cout << "Super! ;)";  

  system("Pause");

  return(-1);
}




Danke erstmal für die codes!

Werd das mal ausprobieren, ´versteh den code zwar nicht ganz, ist aber egal, werd noch ein bisschen in meinem kleinen buch schmöckern müssen *g*;

Obwohl ich mit meinen hausaufgaben noch nicht soweit bin,
denk ich mal das #include "windows.h" nur für c ist und nicht für cpp, da lässt man das h doch weg?

THX and MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.10.2004, 14:22 Uhr
DerSchwarzeSchlumpf




Zitat:
Danke erstmal für die codes!

Werd das mal ausprobieren, ´versteh den code zwar nicht ganz, ist aber egal, werd noch ein bisschen in meinem kleinen buch schmöckern müssen *g*;

Obwohl ich mit meinen hausaufgaben noch nicht soweit bin,
denk ich mal das #include "windows.h" nur für c ist und nicht für cpp, da lässt man das h doch weg?

THX and MFG


was genau bei dem code verstehst du nicht?

windows.h ist hier eigentlich komplett unnütz ich hab das nämli schnell zwecks compiliern in ein anderes projekt "reingehackt" *g*

wenn du "windows.h" weglässt musst du nur die codezeile "sytem("Pause")" auch weglassen. das ist nur dafür da, dass die console nachdem das programm durchgelaufen ist nicht gleich geschlossen wird (weil das programm würde ja nach der ausgabe von "super " sofort geschlossen werden so aber hält er es noch offen bis du eine taste drückst).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.10.2004, 14:40 Uhr
(un)wissender
Niveauwart


Also, mal zu Klärung:

1.
#include "windows.h" ist nicht notwendig für system(""). system ist in cstlib definiert und ANSI C/C++. (Natürlich sind die übergebenen Kommandostrings plattformabhängig)

2.

C++:
using namespace std;
using std::cout;
using std::endl;



Ist so Blödsinn, dann nimm wenigstens using namespace std; raus und füge noch ein paar usings für cin, usw hinzu oder nimm die beiden letzten usings raus, die sind überflüssig.

3.
return(-1); signalisiert einen Fehler, warum nicht return EXIT_SUCCESS oder auch 0.

4.
Allgemein sollte man Beispielcode einfach halten, und nicht so viel redundate Dinge da reinschreiben.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 05.10.2004 um 14:43 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.10.2004, 14:54 Uhr
(un)wissender
Niveauwart


So, geht es mit Zahlen, analog mit Strings


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

int main()
{
    int passwort = 1234, eingabe = 0;
    std::string buffer;
    do
    {
        std::cout << "PW-Zahl: ";
        std::cin >> eingabe;
        if(std::cin.fail()) //z.B. Buchstaben eingegeben.
        {
            std::cin.clear();
            std::getline(std::cin, buffer);
            eingabe = 0;
        }
    } while(passwort != eingabe);
  
    std::getline(std::cin, buffer); //Damit getchar() funzt, muss STDIN leer sein
    //Diese ist ein portabler und sicherer Weg, die Konsole offen zu halten.
    std::getchar();
}


--
Wer früher stirbt ist länger tot.
 
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: