2013-12-03 3 views
-2

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

Username 
Password 
Username 
Password 
... 

Я не могу понять, как заставить его читать друг друга. Вот что у меня есть.

Заголовок:

#include <iostream> 
#include <cstdlib> 
#include <fstream> 

using namespace std; 

class authentication 
{ 
    private: 
     string username; 
     string password; 

    public: 
     void authenticate(); 
     void change_password();    

}; 

реализация класса:

#include "authentication.h" 

void authentication::authenticate() 
{ 
cout << "Enter username\n"; 
cin >> username; 
cout << "Enter password\n"; 
cin >> password; 

string temp_username, temp_password; 

ifstream myfile ("user_list.txt"); 

if(myfile.is_open()) 
{ 
    getline(myfile, temp_username); 
} 



} 

Driver:

#include "authentication.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
authentication test1; 
test1.authenticate(); 

system("PAUSE"); 
return EXIT_SUCCESS; 
} 
+0

Вы должны получить 'username 'и' password' из файла. Не нужно пытаться получить его из 'stdin' (' cin'). –

+0

Я не понял, почему вы ищете userinput ... вы хотите сопоставить его с файлом? – Jekyll

+0

Все приведенные ниже ответы в порядке, _if_ вы не допускаете пробелов в именах пользователей или паролях. – Chad

ответ

1

Кажется, что ваш файл использует обычные пробелы и not linefeeds для распознавания записей. Поэтому я бы сделал что-то вроде этого:

struct UserDetails 
{ 
    std::string username_; 
    std::string password_; 
}; 

std::istream& operator >> (std::istream& is, UserDetails& details) 
{ 
    std::string username, password; 
    if(is) 
    { 
    if((is >> username) && (is >> password)) 
    { 
     details.username_ = username; 
     details.password_ = password; 
    } 
    } 
    return is; 
} 

void test() 
{ 
    std::vector<UserDetails> userDetailSeq; 
    while(!file.eof()) 
    { 
    UserDetails details; 
    if(file >> details) 
     { userDetailSeq.push_back(details); } 
    } 
} 
0

Если вы пытаетесь извлечь отдельные имена пользователей и пароли из файла, попробуйте использовать operator >>() например:

myfile >> temp_username ; 
myfile >> temp_password ; 
1
#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include<vector> 
using namespace std; 

int main(int argc, const char * argv[]){ 
    ifstream input (argv[1]); 
    string username, password; 
    vector<std::string> userNames; 
    vector<std::string> passWords; 

    while(input >> username){ 
     userNames.push_back(username); 
     input >> password; 
     passWords.push_back(password); 
    } 

} 

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

Примечание: вы укажете путь к файлу для входа ifstream (argv [1]); работать ... для этого в xcode, перейти к продукту, схеме, схеме редактирования, нажать знак плюса и ввести путь к вашему файлу в кавычках ...

Смежные вопросы