Назовите точное значение из текстового файла

Я помещаю превосходный ответ JLBorges на аналогичный вопрос дословно из cplusplus.com, так как это наиболее краткое объяснение, которое я прочитал по этому вопросу.

] В шаблоне, который мы пишем, есть два типа имен, которые можно использовать - зависимые имена и не зависимые имена. Зависимое имя - это имя, которое зависит от параметра шаблона; неизменяемое имя имеет то же значение, независимо от параметров шаблона.

Например:

template< typename T > void foo( T& x, std::string str, int count )
{
    // these names are looked up during the second phase
    // when foo is instantiated and the type T is known
    x.size(); // dependant name (non-type)
    T::instance_count ; // dependant name (non-type)
    typename T::iterator i ; // dependant name (type)

    // during the first phase, 
    // T::instance_count is treated as a non-type (this is the default)
    // the typename keyword specifies that T::iterator is to be treated as a type.

    // these names are looked up during the first phase
    std::string::size_type s ; // non-dependant name (type)
    std::string::npos ; // non-dependant name (non-type)
    str.empty() ; // non-dependant name (non-type)
    count ; // non-dependant name (non-type)
}

То, что зависит от зависимого имени, может быть чем-то другим для каждого конкретного экземпляра шаблона. Как следствие, шаблоны C ++ подвержены «двухфазному поиску имен». Когда шаблон сначала анализируется (до того, как выполняется какое-либо создание), компилятор просматривает не зависящие имена. Когда происходит конкретное создание шаблона, параметры шаблона известны к тому времени, и компилятор ищет зависимые имена.

На первом этапе анализатор должен знать, является ли зависимое имя именем типа или имени не-типа. По умолчанию зависимым именем считается имя не-типа.

Использовать ключевое слово typename только в объявлениях шаблонов и определениях, приведенных ниже.


у вас есть квалифицированное имя, которое относится к типу и зависит от параметра шаблона.

0
задан Blank 1 April 2019 в 11:49
поделиться

1 ответ

Если ваш текстовый файл содержит 1 пользователя на строку, и вы разбили его на «,», тогда вы можете взять каждую строку, как и вы, затем разбить эту строку на массив строк [] и проверить, соответствует ли имя «admin» .

public class Main {

static Scanner input = new Scanner(System.in);

public static void main(String[] args) {

    Boolean loggedin = false;

    String fileName = "accounts.txt";
    String line = null;

    System.out.println("What's your username?");
    String tempUsername = input.nextLine();

    System.out.println("What's your password?");
    String tempPassword = input.nextLine();

    try {
        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null) {
            String[] currAccount = line.split(",");

            if (currAccount[1].equals(tempUsername) && currAccount[4].equals(tempPassword)) {
                loggedin = true;

                System.out.println("You have successfully logged in!");
            }
        }

        bufferedReader.close();
    }
    catch(FileNotFoundException ex) {
        ex.printStackTrace();

        // Let's create it if file can't be found or doesn't exist, but let's ask first.

        String answer;

        System.out.print("File not found, do you want to create it? [Y/n]: ");
        answer = input.nextLine();

        if (answer.equalsIgnoreCase("y")) {
            try {
                FileWriter fileWriter = new FileWriter(fileName);
                BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

                System.out.println("File has been created!");
            } catch (IOException exc) {
                exc.printStackTrace();
            }
        } else {
            System.out.println("File was not created!");
        }

    }
    catch(IOException ex) {
        ex.printStackTrace();
    }

    if (!loggedin) {
        System.out.println("Your login combination did not exist.");
    }
}
}

Обратите внимание, я не очень много комментировал, но это все равно должно иметь смысл.

После разделения помните, что вы начинаете с индекса массива 0, а не с 1. Таким образом, с индекса 1 имя учетной записи будет.

Гудлак.

0
ответ дан GodLess 1 April 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: