überprüfen ob ob eingabe gleich der *.txt ist
-
Hallo ich hab noch eine Frage.
Ich habe jetzt einen Usernamen in einer *.txt Datei gespeichert.
Jetzt möchte ich mit if-else überprüfen ob die eingabe in der console gleich ist der in der *.txt - Dateiist das irgendwie möglich ?
Hier wieder ein kleine Auszug aus dem Programm:
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> int main() { int p1,p2,p3,p4,p5,auswahl; int u1,u2,u3,u4,u5,u6; char newuser_y_n; char newuser_y_n2; char newusername[100]; FILE *file; FILE *username; printf(" Username: "); u1 = getche(); u2 = getche(); u3 = getche(); u4 = getche(); u5 = getche(); u6 = getche(); [b] if ( ??? was sollte ich hier schreiben ??? )[/b] { printf("\n Invalid Username !!"); return 1; } printf(" \n Password: "); p1 = getch() - '0'; // - '0' ist dafür weil durch getch() der ASCII-Code eingelesen wird. p2 = getch() - '0'; // - '0' verwandelt den ASCII-Code zurück in den ANSI-Code ! p3 = getch() - '0'; p4 = getch() - '0'; p5 = getch() - '0'; if ( p1 == 5 && p2 == 1 && p3 == 9 && p4 == 1 && p5 == 7) // Passwort ist 51917 { printf("Login sucessful !!"); printf("\n+---------------------------------------+"); printf("\n Willkommen beim Start!");
Danke schonmal im voraus !
mfg
noelino
-
Mir scheint, in deinem Programm wird der Username aus der Datei noch garnicht ausgelesen .... Drum:
- Datei öffnen
- Username auslesen und in eine Variable schreiben (fscanf)
- Datei schließen
- Benutzer gibt einen neuen Usernamen ein > schreiben in eine andere Variable (scanf oder sonst was)
- Vergleich der beiden Variablen. Am besten wohl mit strcpy
- Den Rückgabewert in deiner if-Bedingung auswerten
-
Ich würde das Passwort mit gets() einlesen und denn mit strcmp() vergleichen
-
Gott muss mir langweilig sein..
Naja also irgendwo hatte ich so was noch rumfliegen und da habe ich es eben umgeschrieben.
Ich hoffe Dir wird vor allem der Umgang mit getch(); etwas klarer. Denn das Anlegen von 5 char Variablen scheint hier nicht wirklich praktikabel
Dass das Ganze natürlich überhaupt nicht sicher ist sollte klar sein, aber ist ja wahrscheinlich auch nur eine Übung.
Hoffe da ist nicht zu viel "Wirwar" in einem so alten Code, habe aber alles mal durchkommentiert^^#include <conio.h> #include <stdio.h> #include <string.h> #define PASSWORD "51917" int main() { int i; // laufvariable char buffer[0x100], username[0x100]; // zwei char arrays mit 256 Feldern FILE *file; // ein file-pointer file = fopen("username.txt", "r"); // datei username.txt zum lesen ("r" = read) öffnen. fopen gibt einen pointer auf die datei zurück if (!file) // falls die datei nicht geöffnet werden kann gibt fopen 0 zurück (bzw. pointer auf 0) { printf("could not open username.txt\n"); return 1; } if (!fgets(username, sizeof(username), file)) // fgets liest eine zeile aus file. kann nichts gelesen werden wird 0 zurück gegeben { printf("could not read username\n"); return 2; } if (username[strlen(username) - 1] == '\n') // fgets liest eventuelles '\n' mit ein, dieses muss entfernt werden { username[strlen(username) - 1] = 0; } printf("login as: "); fgets(buffer, sizeof(buffer), stdin); // fgets funktioniert natürlich auch auf stdin ;) (konsole) buffer[strlen(buffer) - 1] = 0; // hier wird sehr sicher das '\n' eingelesen, daher keine abfrage if (strcmp(username, buffer) != 0) // username (aus datei) und buffer (aus eingabe) werden verglichen { // strcmp() gibt 0 zurück falls die strings gleich sind. daher auf != 0 prüfen. printf("invalid username\n"); // if(strcmp()) ginge auch, allerdings könnte das zu missverständnissen führen. return 3; } memset(buffer, 0, sizeof(buffer)); // buffer wird mit 0 überschrieben (damit wir buffer noch einmal nutzen können) printf("password: "); for (i = 0; i < sizeof(buffer); i++) { buffer[i] = getch(); // buffer[i] liest ein neues zeichen ohne echo auf stdout ein. i ist immer kleiner < 256 (!) if (buffer[i] == 0x08) // "löschen" zeichen muss selbst verarbeitet werden { buffer[i] = 0; // buffer[i--] = 0; buffer[i - 1] = 0; // buffer[i--] = 0; i -= 2; // ginge auch, ist so aber vielleicht besser verständlich } if (buffer[i] == '\r') // "enter" muss auch verarbeitet werden. bedenke dass windows hier '\r' sendet { printf("\n"); // also müssen wir den zeilenumbruch selbst ausgeben buffer[i] = 0; // da das '\r' nicht zum string gehoert break; } if (buffer[i] == 0x03) // strg+c (abbrechen von programmen in der konsole) kann man auch noch berücksichtigen { return -1; } } if (strcmp(PASSWORD, buffer) != 0) // PASSWORD (siehe #define) und buffer (aus eingabe) werden verglichen { printf("invalid password\n"); return 4; } printf("login successful\n"); // ist kein fehler aufgetreten ist der nutzer angemeldet printf("root@root#"); // .. return 0; }
siehe auch:
http://www.cplusplus.com/reference/clibrary/cstdio/
http://www.cplusplus.com/reference/clibrary/cstdlib/
http://www.cplusplus.com/reference/clibrary/cstring/