Wenn deine Lösung das gewünschte Ergebnis bringt, dann ist doch alles in Ordnung. War jetzt auch nur mein erster Gedanke dazu, so hätte ich es in php oder c# umgesetzt. Vielleicht hat noch jemand eine bessere Idee
Ankündigung
Einklappen
Keine Ankündigung bisher.
User helfen User - Programmieren
Einklappen
X
-
Das mach ich hiermit:Zitat von IcingD34thdein cpin kann aber auch kleiner 1000 sein, wenn pins mit der 0 beginnen
Edith: Es können bei der Eingabe ja beliebige Zeichen eingegeben werden und eine beliebige Länge. Als erstes müsste man ja Buchstaben,Sonderzeichen, etc... abfangen und eine fehlerhafte Eingabe zurückliefern.
if (!(cin >> cpin )) {
cerr
Kommentar
-
Du machst es dir so kompliziert ... Überprüf cin einfach mit strlen und wegen den Zeichen würde ich isdigit verwenden.Zitat von keu1eedit: mit meiner Lösung ist jetzt natürlich ein Code von 0001-0999 nicht Verfügbar, wobei ich die nullen am Anfang auch echt unsinnig finde, die werden vom Compiler doch eh immer gestrichen, oder?
In VB.Net wäre es einfach:
Unter C++ muss du afaik die einzelnen Zeichen halt mit isdigit überprüfen oder eine kleine Funktion IsNumeric oder so schreiben.Dim sZahl As String = InputBox("bla")
If sZahl.Length = 4 And IsNumeric(sZahl) = True Then MsgBox("Ist eine vierstellige Zahl")
Kommentar
-
Sorry Keule hatte mich auf die erste if-Abfrage konzentriert.
Allerdings hab ich von C++ gar keine Ahnung :P Da ich aber gerade nichts zu tun hab, hab ich mich ein bisschen eingelesen und würde etwas anders herangehen. Und zwar würde ich mit Strings arbeiten statts mit Integern, da man mit C++ anscheinend Strings ziemlich einfach vergleichen kann.
[spoiler]
#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "myfunction.h"
#include
using namespace std;
void pinueberpruefung() {
std:string pin = 1234;
std:string cpin;
int versuche = 3;
int vpin = 0;
do {
cout > cpin;
if(cpin.size()==4){
if(cpin==pin){
system("CLS");
cout
Kommentar
-
Deswegen mit isdigit die Eingabe danach überprüfen.
Dein Einwand ist nicht verkehrt, aber es ändert nichts an der Problematik, dass du mit dieser Art und Weise, niemals einen 0815 PIN erkennst. Unmöglich, da direkt aus der 0815 Eingabe ein 815 entsteht und dieser cpin zugewiesen wird.
Du kannst also nachher nicht mehr prüfen, ob da nur 815 oder 0000815 eingegeben wurde.
Deine aktuelle Überprüfung, ob es nur Zahlen sind, ist ja eigentlich nichts anderes, als eine isdigit Überprüfung der Zeichen. Die kannst du also mit einem String genauso machen ;)
cin kannst du afaik nicht eingrenzen, er wird also immer buchstaben, zahlen und zeichen eingeben können. Die Frage ist halt, wie willst du damit umgehen.
Kommentar
-
String = Array aus CharsZitat von IcingD34thMan könnte die Pin auch in ein Array schreiben und die Eingabe ebenfalls. Dann ließe sich die Arraylänge überprüfen und man könnte die einzelnen Zellen gegenprüfen.
Mit cin hast du keine andere Möglichkeit als einen String zu nehmen. Lass den Nutzer die PIN eingeben, danach prüfst du:
1. Ist der String 4 Zeichen lang
2. Ist jedes der vier Zeichen eine Zahl
Wenn nicht, dann lass ihn erneut eingeben. Wenn doch, dann überprüfe die PIN.
Kommentar
-
Hm, könnte er, falls das in C++ funktioniert. Ergibt aber alles net mehr Sinn als ein String und ist deutlich aufwendiger ;DZitat von IcingD34thIch meinte wenn er es unbedingt als Int machen möchte, kann er das ganze in ein Int Array schreiben ;)
Auch dann musst du ja danach überprüfen ob die Zeichen Zahlen sind. Ob du das nun anhand der Zuweisung von cin >> cpin machst oder mit isdigit ist ja egal.
Ein String ist ein Text und keine Zahl ;) -> string pin = "1234";Zitat von keu1estring pin = 1234; -> Meckert mein Visual Studio schon an..
Kommentar
-
Da ich anscheinend C++ momentan gar net installiert habe, hier mal ein Beispiel für dich in C#. Der Aufbau dürfte ja exakt der gleiche sein. Sollte man natürlich eleganter lösen, aber funktionieren tut es perfekt.
http://pastebin.com/sHYqg8rT
Edit: Hier etwas eleganter: http://pastebin.com/WLswMMbn
Switch Case wäre da natürlich angebracht gewesen ;D
Kommentar
Kommentar