wiederholen Ich arbeite an einem Projekt für eine Programmiersprache "C". Ich habe ein Problem, für das ich keine Abhilfe finden konnte. Das Problem liegt in meiner Struktur, die ich verwende. Er nimmt alle Daten, die ich eingibt, und wiederholt sie 6 Mal. Mein Code istStrukturen, die eingegebene Daten in C
Für die Struktur:
struct authstruct
{
char userName[MAXCHAR];
char userPin[MAXCHAR];
};
Linie, den Eingang
struct authstruct usr;
printf("Please enter your username\n");
scanf("%s",usr.userName);
while (fscanf(fident, "%s%s", auth.userName, auth.userPin) != EOF)
{
printf("%s", usr.userName);
};
Hinweis empfängt, ich habe es Satz, den Code zu drucken, das es zu Testzwecken ist recieveing. Wenn Sie zum Beispiel eingegeben
test
wäre es
testtesttesttesttesttest
Der gesamte Code kick out (ohne Berücksichtigung von nicht-verwandten Funktionen und ohne die oben edit) ist:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* Defining of constants */
#define MAXCHAR 10
#define MAXATTEMPTS 3
#define SIZE 10
/* Prototypes */
int AuthFunc(void);
/* Prototype of structure for Authentication Function */
struct authstruct
{
char userName[MAXCHAR];
char userPin[MAXCHAR];
};
int main(VOID)
{
int login;
login = AuthFunc();
if (login == -1)
{
printf("namepass.txt could not be found\nPlease check for file and try again\n");
}
else if (login == 1)
{
printf("You have tried too many times to login\nPlease restart and try again\n");
}
else if (login == 0)
{
printf("Success!");
}
return 0;
}
/* This function authenticates the user */
int AuthFunc(void)
{
int i = 0;
FILE *fident;
fident=fopen("namepass.txt", "r");
if (fident==NULL)
{
return -2;
}
printf("Hello! Please follow my instructions\n");
struct authstruct auth;
for (i=0; i < MAXATTEMPTS; i++)
{
struct authstruct usr;
printf("Please enter your username\n");
scanf("%s",usr.userName);
while (fscanf(fident, "%s%s", auth.userName, auth.userPin) != EOF)
{
if ((strcmp(usr.userName, auth.userPin)) == 0)
{
printf ("Please enter your password.\n");
scanf ("%s",usr.userPin);
if ((strcmp(usr.userPin, auth.userPin)) == 0)
{
fclose(fident);
return 0;
}
}
}
printf("Incorrect username/password.\n");
}
fclose(fident);
return 1;
}
So führen diese Sie müssen eine neue TXT-Datei namens namepass.txt mit dem ausgewählten Benutzernamen/Passwort erstellen, die in einer Zeile wie im folgenden Beispiel
angeordnet isttest 12345
test2 23456
Ich entschuldige mich für die lange Post, versuchte nur so beschreibend wie möglich zu sein. Dies wurde eingehalten und in Xcode 7.3 auf einem Mac mit OSX 10.11.4 ausgeführt. Wenn dieses Problem nicht auf Ihrem Computer auftritt, lassen Sie es mich wissen und ich fange an, meine Compiler-Einstellungen zu untersuchen. Danke
Zumindest Sie vergleichen Benutzername zum ersten Mal in der Schleife ... –
... und Sie nie Ihre Datei zwischen Versuchen zurückspulen. – WhozCraig
'if ((strcmp (usr.userName, auth.userPin)) == 0)' -> 'if ((strcmp (usr.userName, auth.userName)) == 0)' – BLUEPIXY