Запись в массив строк. Сравнение

128
04 августа 2021, 02:50

Суть моей задачи:

  1. Получение данных из файла. Мы заполняем массив logfile всеми логинами из файла, массив logpass заполняется паролями.
  2. Цикл, в котором проверяется введенный пользователем логин и пароль, даже если данные из массива нашлись, нужно проверить номер элемента массива. Моя проблема в том,что не удаётся правильно записать данные из файла.Также, возникла сложность с проверкой номера элемента. Буду признателен за советы.
char logfile[100];
char logpass[100];
while (!fout.eof())
{
fout >> logfile;
fout >> logpass;
fout.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
};
int n = strlen(logfile);
for(int i=0;i<n;i++)
{
  if(strcmp(logfile,login))
  {
     cout << "Данные совпадают." << endl;
  }
  else
     cout << "\033[1;31mПользователя не существует.\033[0m" << endl;
}
Answer 1

Сделайте так - если хотите все собрать в одну строку:

string logfile;
string logpass;
for(string l,p; fout >> l >> p;
    fout.ignore(std::numeric_limits<std::streamsize>::max(),'\n')) {
    logfile += l + " ";
    logpass += p + " ";
}

Так вы избегаете неприятностей:

  1. С ограниченной длиной строк logfile и logpass.
  2. С неверным определением конца файла (признак конца файла устанавливается только после неудачной попытки чтения за концом файла. Если вы просто дочитаете до конца файла (не за него) - eof() вернет false.
Answer 2

Как сказали в комментариях вы просто перезаписываете переменные logfile и logpass.

Перепешите вывод из файла примерно так:

std::vector<std::string> logins;
std::vector<std::string> pass;
std::ifstream f( "file.txt" );
while (!f.eof())
{
    std::string tmp;
    f >> tmp;
    logins.push_back(tmp);
    f >> tmp;
    pass.push_back( tmp );
}
READ ALSO
Не могу разобраться с записью указателя на функцию С++

Не могу разобраться с записью указателя на функцию С++

Объясните, что это за мура? Вроде как указатель на функцию, знак равенства сбивает с толку, не видел такой записи

195
left operand must be l-value

left operand must be l-value

Я хочу неизвестному типу указателя присвоить void *, те

336
Веб доступ к десктопному приложению

Веб доступ к десктопному приложению

Объясню суть проблемы: есть десктопное графическое приложение ,написанное на с++, появилась срочная необходимость доступа к нему через web браузер,...

155
Вывести в консоль фигуру из цифр

Вывести в консоль фигуру из цифр

Пользователь вводит размер фигуры сам и программа печатает в консоли прямоугольник следующим образом:

149