Пользователь не может войти в систему после создания учетной записи

Я пытаюсь работать над простым приложением самостоятельно на C. Это позволяет любому создать свою учетную запись и сохранить ее личную информацию, и это безопасно. До сих пор пользователь может создать свою учетную запись, когда когда пользователь возвращается при регистрации он не может. Я написал и использовал файловый ввод-вывод для сохранения учетных данных пользователя.

#include <stdio.h>
#include <string.h>
#include "cs50.h"

int main (int argc, string argv[])
{
    // The pointer to the File
    FILE* accountsDatabase = fopen("accountsDatabase.txt", "r+");

    char Fdecision;
    char Gateway = 'Y';
    char Gatewaydenied = 'N';

    string stringGateway = "Yes";
    string stringGatewayDenied = "No";
    string information;
    string Newusername;
    string Newpassword;
    string Universalpassword;
    string Universalusername;

    printf("\n \t \n");

    printf("\tThis is Dell login interference.....");
    printf("\n");
    printf("\t#################################\n");
    printf("\t#################################\n");

    printf("\n");
    printf("\n");

    printf(" Please inset your id and password in below user friendly interface.");
    printf("\n");
    printf("\n");

    printf("Please type answer in Y and N");
    printf("\n");
    printf("Do you want the Dell's login user interfae: ");
    Fdecision = GetChar();

    if (Fdecision == Gateway)
    {
        printf("Do you want to create a new user. Answer in Yes or NO: ");
        string userChoice = GetString();
        printf("\n");
        if (strcmp(stringGateway, userChoice) == 0)
        {
            printf("To create a New User Account.... Fill following boxes..\n");
            printf("\n");
            printf("username: ");
            Newusername = GetString();
            printf("password: ");
            Newpassword = GetString();
            printf("\n");
            printf("Your personal textBook..:: ");
            information = GetString();
            printf("\n");
            // Checks if it is opened..
            if (accountsDatabase == NULL)
            {
                printf("Error opening file:\n");
            }
            else
            {
                fputs(Newusername, accountsDatabase);
                fputs(Newpassword, accountsDatabase);
            }
            printf("Do you want to login.? Answer in Yes or No: ");
            string LoginDecision = GetString();
            if(strcmp(stringGateway, LoginDecision) == 0)
            {
                printf("Username: ");
                string username = GetString();
                printf("\n");
                if (strcmp(Newusername, username) == 0)
                {
                    printf("Password: ");
                    string password = GetString();
                    if (strcmp(Newpassword, Newpassword) == 0)
                    {
                        printf("\n");
                        printf("Confirming Identity.....\n");
                        printf("Identity Confirmed.....\n");
                        printf("\n");
                        printf("Do you want to reveal your sensitive information: ");
                        string secondDecision = GetString();
                        if (strcmp (stringGateway, secondDecision) == 0)
                        {
                            printf("\n");
                            printf("Enter password:: ");
                            string Currentpassword = GetString();
                            if (strcmp (Newpassword, Currentpassword) == 0)
                            {
                                printf("\n");
                                printf("%s\n", information);
                                printf("\n\n");
                            }
                        }
                    }
                }
            }
        }
        else if (strcmp(stringGatewayDenied, userChoice) == 0)
        {
            printf("\n");
            printf("Username: ");
            string username = GetString();
            printf("\n");


            // Checks if it is opened..
            if (accountsDatabase == NULL)
            {

                printf("Error opening file:\n");
            }
            else
            {
                fgets(Universalusername, "%s", accountsDatabase);


                if (strcmp(Universalusername, username) == 0)
                {
                    printf("Password: ");
                    string password = GetString();

                    if (strcmp(Universalpassword, password) == 0)
                    {
                        printf("\n");
                        printf("Confirming Identity.....\n");
                        printf("Identity Confirmed.....\n");
                        printf("\n");
                        printf("Do you want to reveal your sensitive information: ");
                        string secondDecision = GetString();
                        if (strcmp (stringGateway, secondDecision) == 0)
                        {
                            printf("\n");
                            printf("Enter password:: ");
                            string Currentpassword = GetString();
                            if (strcmp (Universalpassword, Currentpassword) == 0)
                            {
                                printf("\n");
                                printf("%s\n", information);
                                printf("\n\n");
                            }
                        }

                    }
                }
            }
            printf("Universalusername : %s", Universalusername);
        }
        else
        {
            printf("Take these security measures...\n");
            printf("##############################");
            printf("\n");
            printf(" 1) You need specil previlage to access sensitive information...\n");
            printf(" 2) Please run in a minute either alarm will be trigered..\n");
            printf(" 3) Security camera are availabel, \n 4) run now.\n");
        }

    }
    else if (Fdecision == Gatewaydenied)
    {
        printf("\n");
        printf("You can get off from front door.\n");
        printf("Don't LOok Back, it's not safe..\n'");
        printf("What do you think? Can you cheat me? \n");
        printf("No, you cannot!");
    }

    else
    {
        printf("\n");
        printf("Please choose between Yes (Y) or No (N)\n");
        printf("Not the full spelling but ony a single abbreviated letter..\n");
        printf("Y or N..\n");
    }

    fclose(accountsDatabase);
}

person kapil karnani    schedule 14.11.2015    source источник
comment
1. string - плохая идея для typedef, потому что а) неясно, что вы имеете дело с указателем. б) В c нет строкового типа, понимание того, как строки представлены в c, имеет фундаментальное значение для любого программиста на C. 2. Это то, что имел в виду Торвальдс с более чем 3 уровнями отступов, довольно сложно понять ваш код без комментариев и с его текущей структурой.   -  person Iharob Al Asimi    schedule 14.11.2015
comment
Я согласен с @iharob, ваш sw очень сложно читать. Во-первых: вы не загружаете файл при запуске, поэтому вы не можете проверить, присутствует ли пользователь уже или нет в вашем файле базы данных. Вы не выделяете какую-либо структуру для ее представления и, в основном, вы неправильно выделяете и управляете указателем char *.   -  person gaetanoM    schedule 14.11.2015
comment
@gaemaf Игнорирование возвращаемого значения fopen() - еще одна очень плохая вещь в этом коде.   -  person Iharob Al Asimi    schedule 14.11.2015
comment
Возможно, мой код выглядит очень странно. но @iharob я сохраню ваше предложение, я преобразовал строку в массив символов, и теперь это работает. Спасибо   -  person kapil karnani    schedule 15.11.2015
comment
может кто-нибудь сказать мне, какова связь между string и Torvalds 3 levels of indentation? я реально запутался!!!   -  person milevyo    schedule 28.11.2015


Ответы (1)


ваш код не так ясен и легко читается. Чтобы помочь вам, я написал этот фрагмент кода, который вы можете использовать в своей повседневной кодировке, и это может облегчить вашу жизнь. желаю, чтобы это могло помочь.

#include <stdio.h>
#include <string.h>
#include <conio.h>



input(char *prompt,char *buff);
int YesNoQuetion(char *prompt);

int main (void)
{
    char firstname[50];
    char lastname[50];
    printf("This is a little code that will help you create a clean code\n\n");
    printf("Please enter your first and last name\n");

    input("First name",firstname);
    input("Last name",lastname);

    if (YesNoQuetion("Do you realy want to know?"))
    {
       printf("\nThat's good '%s, %s', you just pressed Yes\n",firstname,lastname);
    }
    else{
         printf("\nYou answerd No, that is also good\n");;
    }

  return 0;
}

 /*__________________________________________________________________________________
*/
int YesNoQuetion(char *prompt){
    int r=0,c;
    printf("%s (Y/N) : ",prompt);
    while(1){
        c=_getch();
        if(c=='n' || c=='N' || c=='y' || c=='Y'){
            printf("%c\x8",c);
            r=c;
        }else{
            if( (c=='\n'||c=='\r') && r)
                break;
            r=0;
            printf("%d\x8\x7",c);
        }
    }
    printf("%s\n",(r=='y'|| r=='Y')?"Yes":"No");
    return (r=='y'|| r=='Y');

}
  /*__________________________________________________________________________________
*/
int input(char *prompt,char *buff){
    printf("%s :\t",prompt);
    return scanf("%s",buff);
}

/*__________________________________________________________________________________
*/
person milevyo    schedule 14.11.2015
comment
Если вы написали этот кусок кода с нуля, почему вы написали его именно так? Вы можете немного улучшить читаемость. - person Iharob Al Asimi; 15.11.2015
comment
@iharob, у меня уже есть программа проверки орфографии и форматирования кода, которая называется Astyle. мне не нужен другой, который называется ихароб. каждый раз, когда я сталкиваюсь с тобой, ты жалуешься. сделать что-нибудь полезное. - person milevyo; 28.11.2015
comment
Я делаю полезные вещи, поэтому у меня хорошая репутация. Я просто ненавижу уродливый код. Мне тоже не нравится ваша логика. - person Iharob Al Asimi; 28.11.2015
comment
@iharob, я знаю, что у меня уродливая логика и код, я хотел бы увидеть твой. - person milevyo; 28.11.2015
comment
Вы можете, есть много моих ответов с кодом или критикой стиля и логики. - person Iharob Al Asimi; 28.11.2015