C база данных паролей - PullRequest
0 голосов
/ 09 января 2019

Я создал программу, которая позволяет вам сменить пароль из файла, если вы введете предыдущий пароль, который был в этом файле. Я хочу создать имя пользователя, которому будет назначен пароль. Имя пользователя и пароль должны быть записаны в файле, не удаляя ничего, что было там ранее. Программа также должна иметь возможность проверить пароль для имени пользователя в файле. Вот мой текущий код, но я не могу написать несколько вещей в данном файле. Я не хочу, чтобы вы давали мне код для моего вопроса, только алгоритм с некоторыми советами. Спасибо!

#include<stdio.h>
#include <conio.h>
#include <fstream>
#include <string.h>
#include <stdlib.h>     
int main()
{
    FILE *passwords;
    int p='*',i,j,count,triesLeft,a,numberofTries=0;
    char password[5] = {0,0,0,0,0};
    char passwordCheck[5] = {0,0,0,0,0};
    passwords = fopen("passwords.txt","r"); 
    printf("You have 3 tries to enter your password!\n");
    for(count=0;count<3;count++) 
        {
            numberofTries++;
            triesLeft = 3 - count;
            printf("You have %d tries left!\n", triesLeft);
            printf("Enter your password: ");
            scanf("%s", &passwordCheck);
            fscanf(passwords,"%s",&password);
            if(strcmp(password, passwordCheck) == 0)
                {
                    numberofTries--;
                    printf("Press 0 if you want to set up a new password, press 1 to stop the program\n");
                    scanf("%d", &a);
                    if(a==0)
                        {
                            passwords = fopen("passwords.txt","w");
                            printf("New password:");
                            for(i=0;i<5;i++)
                                {
                                    password[i] = getch();
                                    putchar(p); 
                                }
                            for(j=0;j<5;j++)
                                {
                                    fprintf(passwords,"%c",password[j]); 
                                }
                        }
                    else if(a==1)
                        {
                            printf("Old password still in place");
                        }
                    break;
                }
            else
                {
                    printf("Wrong password!");  
                }
        }
    if(numberofTries == 3)
        {
            printf("You are out tries!");
        }
    fclose(passwords); 
}

1 Ответ

0 голосов
/ 09 января 2019

Ознакомьтесь с открытой документацией . Волшебная фраза здесь - «режим доступа». Когда вы открываете файл, указатель FILE указывает на определенную позицию внутри файла. Установив соответствующий режим доступа, вы можете выбрать, где будет расположен указатель положения при открытии файла. Может быть, функция fseek вам тоже интересна. Это позволяет вам перемещать этот указатель.

Еще несколько советов для вашего кода:

  • Убедитесь, что вы не используете много ненужных переменных, так как они запутывают ваш код.
  • Когда вы используете fopen, всегда проверяйте, правильно ли установлен указатель (проверьте на NULL), иначе ваша программа может завершиться с ошибка сегментации, если он не может найти файл или получить к нему доступ.
  • В C все, что отличается от 0 или NULL, истинно. Это относится к указатели как для числовых значений. Не стесняйтесь использовать отрицание оператор "!" в сочетании с такими испытаниями.
...