Загрузка...

Почему после 1 круга в переменную b ничего не записывается из файла?

Тема в разделе C/C++ создана пользователем xviixviixviixvii 19 янв 2022. (поднята 27 янв 2022) 283 просмотра

  1. xviixviixviixvii
    xviixviixviixvii Автор темы 19 янв 2022 1948 17 апр 2021
    Код

    // ConsoleApplication25.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
    //

    #include <iostream>
    #include <string>
    #include <map>
    #include <fstream>

    using namespace std;
    int hf(string const& pass) {
    unsigned long hash = 5381;
    for (auto c : pass) {
    hash = (hash << 5) + hash + c; /* hash * 33 + c */
    }
    return hash;
    }
    using namespace std;
    int main()
    {

    setlocale(LC_ALL, "Russian");

    ifstream fin("file.txt");
    ofstream fout("file.txt");
    //fstream fout;
    //fout.open("file.txt", fstream::in | fstream::out | fstream::app);

    //объявление
    string login;
    string pass;

    //запрос на ввод
    cout << "Введите логин: ";
    cin >> login;
    cout << "Введите пароль: ";
    cin >> pass;

    //получаем хеш из функции
    long long int hash = hf(pass);
    //cout << hf(pass) << endl; //

    //создание словаря вида hash:pass
    map<int, string> d;
    d.insert(make_pair(hash, pass));
    auto it = d.find(hash);
    //cout << it->second << endl;

    //ввод логина и хеша в файл
    fout << hash << endl << login;

    string find;
    cout << "Введите нужный логин: ";
    cin >> find;

    // пробегаем по файлу
    bool i = true;
    int w = 2;
    string b;


    while(fin){
    b = "";
    fin >> b;
    cout << b << endl;
    if (i == false) {
    int a;
    fin >> a;
    auto it = d.find(a);
    cout << it->first << endl;
    break;
    }
    if (b == find) i = false;

    }




    return 0;
    }

    Ввод /вывод[IMG]
    Файл [IMG]
     
  2. std
    std 19 янв 2022 9 3 янв 2017
    круг == итерация while? Если да, то ты же сам стопаешь строкой
    if (b == find) i = false
     
    1. xviixviixviixvii Автор темы
      std, но b != find, а цикл продолжается, выводя пустые строки
  3. std
    std 20 янв 2022 9 3 янв 2017
    xviixviixviixvii, ля там нужно после
    fout << hash << endl << login;
    добавить
    fout.flush();
     
    20 янв 2022 Изменено
    1. xviixviixviixvii Автор темы
      std, ошибка
    2. xviixviixviixvii Автор темы
    3. Посмотреть следующие комментарии (1)
  4. std
    std 20 янв 2022 9 3 янв 2017
    тебе нужно поменять очередь записи
    fout << login << endl << hash;

    и читать уже с b
    int a = stoi(b);
    т.к. там уже конец файла и ты ничего не читаешь
    и убрать
    fin >> a;
    не забудь
     
    20 янв 2022 Изменено
    1. xviixviixviixvii Автор темы
    2. xviixviixviixvii Автор темы
      std, это не решает проблему, все также b пустая на 2 кругу цикла
    3. std
      xviixviixviixvii, покежь весь код, потому-что у меня все робит и на mingw и msvc
Top
Загрузка...