Sponsor-Board.de

Normale Version: [C++] Dialog-Textfeld Eingabe verwenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe folgenden Code im Internet gefunden:

PHP-Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <windows.h>
 
char initChoice;
 
char username;
char password;
char usery0;
char passy0;
 
void Login();
void Register();
 
int main()
{
    
system("title XeClutch - Simple Login System");
    
system("color a");
    
printf("Hello, what would you like to do?\n[A] Login\n[B] Register\n");
    
scanf("%c", &initChoice);
    if(
initChoice == 'A' || initChoice == 'a')
    {
        
Login();
    }
    else if(
initChoice == 'B' || initChoice == 'b')
    {
        
Register();
    }
    else
    {
        
printf("Invalid Operation...");
        
system("pause");
    }
    return 
0;
}
 
void Login()
{
    
printf("\n\nPlease enter your username: ");
    
scanf("%s", &usery0);
    if(
usery0 == username)
    {
        
printf("Please enter your password: ");
        
scanf("%s", &password);
        if(
passy0 == password)
        {
            
printf("Successful Login!");
            
system("pause");
        }
        else
        {
            
printf("Incorrect Password...\n");
            
system("pause");
        }
    }
    else
    {
        
printf("Incorrect Username...\n");
        
system("pause");
    }
}
 
void Register()
{
    
printf("\n\nEnter a new username: ");
    
scanf("%s", &username);
    
printf("Enter a new password: ");
    
scanf("%s", &password);
    
printf("\nRegistration Successful!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
main();


Nun wollte ich fragen, wie ich am besten die Eingabe vom Dialog-Textfeld verwende.

Ich habe das Script soweit gekürzt:

PHP-Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <windows.h>
 
char username;
char password;
char usery0;
char passy0;
 
void Login();
 
void Login()
{
    
scanf("%s", &usery0);
    if(
usery0 == username)
    {
        
printf("Please enter your password: ");
        
scanf("%s", &password);
        if(
passy0 == password)
        {
            
printf("Successful Login!");
            
system("pause");
        }
        else
        {
            
printf("Incorrect Password...\n");
            
system("pause");
        }
    }
    else
    {
        
printf("Incorrect Username...\n");
        
system("pause");
    }


Da ich absoluter C++ Anfänger bin, hab ich noch nicht so wirklich den Durchblick. Biggrin Wäre sehr erfreut, wenn mir jemand helfen könnte^^

Ich habs so gelernt:

PHP-Code:
#include <iostream>
#include <stdio.h>
string eingabe;
cout << "Bitte xyz eingeben: " << endl;
cin >> eingabe;
cout << "Deine Eingabe war" << eingabe << endl


Ist halt eine komplett andere Methode, daher brauchst du auch iostream (ohne ".h").


P.S.
Von dem

PHP-Code:
system("pause"); 

Rate ich dir dringend ab. Es gibt nix cooleres als wenn du dein Programm testweise mal unter einem anderen OS compilierst - mit obigen Code bindest du dich zwangsweise an Windows (daher auch windows.h).
Unter UNIX hast du keinen solchen Befehl.

Achso:

Der Datentyp "Char" ist nur ein Zeichen, du musst entweder ein Char Array erstellen (aneinanderreihung mehrerer Zeichen) oder du nutzt einfach einen string.

Bspw:

PHP-Code:
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
char eingabe_als_char;
string eingabe_als_string;
//String sind mehrere Chars hintereinander - Char Array sind logisch mehrere Chars untereinander.
char eingabe_tmp;
int main()
{
    
cout << "Bitte EINEN Buchstaben eingeben: " << endl;
    
cin >> eingabe_tmp;
    
eingabe_als_char eingabe_tmp;
    
eingabe_als_string eingabe_tmp;

    
cout << "Eingabe als CHAR: " << eingabe_als_char << endl << "Eingabe als String: " << eingabe_als_string << endl;
    
//Jetzt wirds interessant
    
cout << "Bitte EINEN Buchstaben eingeben: " << endl;
    
cin >> eingabe_tmp;
    
eingabe_als_char eingabe_als_char eingabe_tmp// ASCII Wert von 1. Buchstaben wird auf 2. Buchstaben addiert
    
eingabe_als_string eingabe_als_string eingabe_tmp//Buchstabe wird hinter den 2. Buchstaben angereiht.
    
cout << "Eingabe als CHAR: " << eingabe_als_char << endl;
    
cout << "Eingabe als String: " << eingabe_als_string << endl;

italian-power schrieb:
Ich habs so gelernt:

Code:
#include <iostream>
#include <stdio.h>
string eingabe;
cout << "Bitte xyz eingeben: " << endl;
cin >> eingabe;
cout << "Deine Eingabe war" << eingabe << endl;


Ist halt eine komplett andere Methode, daher brauchst du auch iostream (ohne ".h").


P.S.
Von dem

Code:
system("pause");

Rate ich dir dringend ab. Es gibt nix cooleres als wenn du dein Programm testweise mal unter einem anderen OS compilierst - mit obigen Code bindest du dich zwangsweise an Windows (daher auch windows.h).
Unter UNIX hast du keinen solchen Befehl.


Hey, danke schonmal für die Antwort^^

ist eig auch zwangsweise für Windows Smile ich probier mich erstmal an der Command-Prompt von Windows, anstatt direkt an ein GUI zu gehen. Bisher geht's super Biggrin

Naja, der Hauptvorteil von C++ ist eben Crossplattform.
Ich habe in der Schule immer Konsolenanwendungen erstellt, testweise dann auch mal einige Codes in Linux mit gcc compiled und siehe da: es liefen fast alle problemlos und auf anhieb.

Funktioniert dein "Ursprungscode" schon?
das "&" bei bspw scanf("%s", &username); bewirkt, dass der Funktion die Speicheradresse übergeben wird.
Ich gehe stark davon aus, dass scanf den eingelesenen Wert (%s = String ?) in die Speicheradresse schreibt. Es wird also keine Kopie der Variable "username" erstellt.
Demnach könntest du nachdem du einen account erstellt hast und dich einloggst eine Willkommensnachricht senden:

PHP-Code:
void login()
{
... 
login erfolgreich
printf
("Willkommen " +username);
...

Oder beim registrieren:

PHP-Code:
void register ()
{
... 
registrierung erfolgreich
  printf
("\nRegistration Successful!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  
printf("Accountname: \t" +username+"\n Passwort: \t" +password);

    
main();
...


Ausgabe wäre dann:

Code:
Registration Successful!


Accountname:          a
Passwort:                3


Also falls das wirklich so ist muss der compiler einen Fehler ausgeben, spätestens wenn du zwei Zeichen eingibst stürzt das Programm aber ab.

Problem: scanf denkt er hat die Speicheradresse eines String, ein String ist immer mindestens um ein byte länger als ein Char. -> Speicherzugriffsfehler.

PS: Die gekürzte Version wird natürlich nicht funktionieren.

italian-power schrieb:
Naja, der Hauptvorteil von C++ ist eben Crossplattform.
Ich habe in der Schule immer Konsolenanwendungen erstellt, testweise dann auch mal einige Codes in Linux mit gcc compiled und siehe da: es liefen fast alle problemlos und auf anhieb.

Funktioniert dein "Ursprungscode" schon?
das "&" bei bspw scanf("%s", &username); bewirkt, dass der Funktion die Speicheradresse übergeben wird.
Ich gehe stark davon aus, dass scanf den eingelesenen Wert (%s = String ?) in die Speicheradresse schreibt. Es wird also keine Kopie der Variable "username" erstellt.
Demnach könntest du nachdem du einen account erstellt hast und dich einloggst eine Willkommensnachricht senden:

PHP-Code:
void login()
{
... 
login erfolgreich
printf
("Willkommen " +username);
...

Oder beim registrieren:

PHP-Code:
void register ()
{
... 
registrierung erfolgreich
  printf
("\nRegistration Successful!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  
printf("Accountname: \t" +username+"\n Passwort: \t" +password);

    
main();
...


Ausgabe wäre dann:

Code:
Registration Successful!


Accountname:          a
Passwort:                3


Also falls das wirklich so ist muss der compiler einen Fehler ausgeben, spätestens wenn du zwei Zeichen eingibst stürzt das Programm aber ab.

Problem: scanf denkt er hat die Speicheradresse eines String, ein String ist immer mindestens um ein byte länger als ein Char. -> Speicherzugriffsfehler.

PS: Die gekürzte Version wird natürlich nicht funktionieren.


Hey, ja ich weiß^^

habs auch anders gekürzt jetzt. Was mein nächstes Vorhaben wäre, ist folgendes: Ich schreibe mir eine Authentication.php, welche mit meinem Programm kommunizieren kann.

Das heißt: Ein User kann sich erstmal auf meiner Seite registrieren und anschließend dann im Programm einloggen. Beim Login wird eine Anfrage an die Authentication.php geschickt, welche dann schaut, ob der User, das Passwort und die Hardware-ID übereinstimmen. Anschließend gibt die Authentication.php ein "OK" oder "ERROR" zurück.

Wenn die Authentifizierung erfolgreich war, wird man weitergeleitet zu einem Optionsmenü, in welchem er zwischen 3 Optionen auswählen kann. Wenn die Authentifizierung nicht erfolgreich war, gibt's einfach eine Error-Message, dass User, Passwort oder HWID nicht stimmen.

Und jetzt komme ich zur eigentlichen Frage: Wie handhabe ich die Kommunikation zwischen PHP und meinem Programm?

C++, Cross-Plattform-Kompatibilität? Irgendwas passt da nicht so ganz, denn C++ muss auf jedem Rechner neu kompiliert werden, um überhaupt Bytecode-Dateien zu erhalten die auch dem Maschinencode des jeweiligen Chipsatzes entsprechen.

Verwechselt ihr das vllt grade mit Java? Das ist wirklich Cross-Plattform-Kompatibel

Dennis schrieb:
C++, Cross-Plattform-Kompatibilität? Irgendwas passt da nicht so ganz, denn C++ muss auf jedem Rechner neu kompiliert werden, um überhaupt Bytecode-Dateien zu erhalten die auch dem Maschinencode des jeweiligen Chipsatzes entsprechen.

Verwechselt ihr das vllt grade mit Java? Das ist wirklich Cross-Plattform-Kompatibel


Ich hab nie von Cross-Plattform geredet. Das war italian Biggrin

Aber C++ kann man auf jeden Fall unter Linux compilen.

Referenz-URLs