Passwort eingabemit Enter beenden!
-
Ja eig.13 oder ?
-
14 ...?
Ist Os-Abhängig. Auf Mac afaik 10, bei Windows afaik 13&14..Übrigens ist der Code komisch. So is besser:
std::string Passwort() { char temp; std::string passwort; std::cout<<"Your Passwort Please : \n"; while((temp=getch()) != 13) { std::cout << '*'; passwort += temp; } return passwort; }Edit: jetz richtig.
-
Auf Windows gibt es "\r\n" bei Enter, deswegen sollte man '\r' abfragen (also 13, wenn man \n abfragt, wird ein Sternchen zu viel ausgegeben). Auf Linux gibts nur '\n', deshalb muss man dort auch '\n' abfragen. Also:
while((temp = getch()) != '\r' || temp != '\n')
-
Hab gerade das hier gefunden:
Drücken der Taste ↵ Enter (daher auch die Bezeichnung Return) entspricht – je nach System – dem CR, dem LF, der Zeichenkette CR LF, oder auch dem Zeichen NL.
Habs grad bei mir versucht, da ist es 10 (Win7 x64 Home). Bei mir an der Schule war es glaub die 13 (Win 2000). Dann ist es bei dir eventuell auch die 10.
-
Nochwas: für'n Backslash brauchst du explizite zeugs
-
Hacker schrieb:
Nochwas: für'n Backslash brauchst du explizite zeugs
???????????????????????????????????????????????
-
Nein, wenn du'n backslash machst, wird der einfach mit eingelesen, anstatt das letzte Zeichen zu löschen.
-
Hacker schrieb:
Nein, wenn du'n backslash machst, wird der einfach mit eingelesen, anstatt das letzte Zeichen zu löschen.
Du meinst wohl ein Backspace == '\b'...
-
std::string Passwort() { char temp; std::string passwort; std::cout<<"Your Passwort Please : \n"; while((temp=getch()) != 13) { if(temp == 8) { passwort.erase(passwort.length()-1); std::cout << "\b \b"; continue; } std::cout << '*'; passwort += temp; } return passwort; }Jetz gehts
-
Hmm naja das liegt glaub ich an dem Rest meines Programmes!
Weil wenn ich id eingib und enter drück kommt des Passwort eingabe feld mit nem Stern ! Also wenn ich dann 10 mach geht programm an der Stelle zu wo ich von id zu pw wechsel !
Hier der kommt zum bessern verstaendnis!#include "regi.h" int main() { string id,name,pw; name = kontoName(); makelibary(name); name = makeDats(name); ofstream fout(name.c_str()); fout<<standartVar::n<<endl; id=Id(); pw=Passwort(); fout<<id<<endl; fout<<pw<<endl; return 0; }#ifndef REGI_H_INCLUDED #define REGI_H_INCLUDED #include <iostream> #include <fstream> #include <string> #include <sys/stat.h> #include <sys/types.h> #include <termios.h> using namespace std; namespace standartVar { int n = 2; } int getch() { static int ch = -1, fd = 0; struct termios neu, alt; fd = fileno(stdin); tcgetattr(fd, &alt); neu = alt; neu.c_lflag &= ~(ICANON|ECHO); tcsetattr(fd, TCSANOW, &neu); ch = getchar(); tcsetattr(fd, TCSANOW, &alt); return ch; } string kontoName() { string name3; cout<<"Konto Name : \n"; cin>>name3; return name3; } void makelibary(string name1) { name1 = "Acc/" + name1; mkdir(name1.c_str(), 0777); } string makeDats (string name2) { name2 = "Acc/"+name2+"/"+name2; return name2; } string Id() { char id[15]; cout<<"Your Id Please : \n"; cin>>id; return id; } string Passwort() { char temp; string passwort; cout<<"Your Passwort Please : \n"; while((temp=getch()) != 10) { cout << '*'; passwort += temp; } return passwort; } #endif // REGI_H_INCLUDEDVielen Dank für die bissherigen Antworten !
-
#include "regi.h" int main() { makelibary(kontoName()); ofstream fout(makeDats(name).c_str()); fout<<standartVar::n << '\n' << Id() << '\n' << Passwort() << '\n'; }Kann man bestimmt noch mehr verbessern...
-
Kann mir keiner helfen?
Danke für den Tipp!
-
Kann mir keiner helfen?
-
-
Klappt leider immer noch nicht mit dem lesen !
Gib alles ein wenn dann Passwort kommt passiert nix wenn ich enter drück -.-
-
wenn ich 10 nehme wird die while schleife übersprungen!
-
Was soll den passieren, wenn du Enter drückst? Wie sieht dein Code aus?
-
Mein neuer code :
#include "regi.h" int main() { string name; makelibary(kontoName()); ofstream fout(makeDats(name).c_str()); fout<<standartVar::n << '\n'; fout<< Id()<<'\n'; fout<< Passwort(); return 0; }#ifndef REGI_H_INCLUDED #define REGI_H_INCLUDED #include <iostream> #include <fstream> #include <string> #include <sys/stat.h> #include <sys/types.h> #include <termios.h> using namespace std; namespace standartVar { int n = 2; } int getch() { static int ch = -1, fd = 0; struct termios neu, alt; fd = fileno(stdin); tcgetattr(fd, &alt); neu = alt; neu.c_lflag &= ~(ICANON|ECHO); tcsetattr(fd, TCSANOW, &neu); ch = getchar(); tcsetattr(fd, TCSANOW, &alt); return ch; } string kontoName() { string name3; cout<<"Konto Name : \n"; cin>>name3; return name3; } void makelibary(string name1) { name1 = "Acc/" + name1; mkdir(name1.c_str(), 0777); } string makeDats (string name2) { name2 = "Acc/"+name2+"/"+name2; return name2; } string Id() { string id; cout<<"Geben sie ihre Id ein : \n"; cin>>id; return id; cout<<endl; } string Passwort (char replace = '*') { cout<<"Your Passwort Please\n"; string password; char now = '\0'; while(now != 10) { now = getch(); if(now == 0 || now == 0xE0) { getch(); continue; } if(now < 32) continue; password += now; cout << replace; } return password; } #endif // REGI_H_INCLUDEDDieses Programm laeuft auf Ubuntu !
IDE Code Blocks Compiler GCC
Das mit dem Passwort klappt nicht ich bekomm den nicht dazu das wenn ich Enter drück das er schliesst !
Und wenn ich bei der while Schleife sag das wenn now 10 ist das er dann schliessen soll ,dann üperspringt er ganze while schleife !
Das Programm :
Fragt dich nahc nem namen dann erstellt er im Ordner Acc ein Ordner mit dem namen ,dannah tut er noch ne datei erstellen mit dem namen und tut id und pw reinschreiben !Vielen Dank für die Antworten bis jetzt !
-
1. Mal mit Warnungen compilert? Da sollte dir was entgegen geworfen werden.
2. Mal auf die Idee gekommen, dir den aktuellen Wert von now ausgeben zu lassen?
3. Es schließt nicht bei Enter? So wie es jetzt da steht, sollte das eigentlich durchlaufen, ohne dass du überhaupt nach dem Passwort gefragt wirst. Und tut's bei mir auch (fast gleiche Konfiguration wie dein System)
4. Du hast ja so einige schlimme Sachen in deinem Code, aber das hier ist echt niedlich:void makelibary(string name1) { name1 = "Acc/" + name1; mkdir(name1.c_str(), 0777); } string makeDats (string name2) { name2 = "Acc/"+name2+"/"+name2; return name2; }
-
Also ich möchte mein Code ja verbessern und erweitern aber komm irgendwie nicht mehr weiter hab alles versucht in Windows hab ich das geschaft
