Установить целочисленную переменную через чтение файла - PullRequest
0 голосов
/ 21 января 2020

Я знаю, как передать строки из текстового файла. В предыдущем проекте я читал в строках, а затем проверял их на наличие «t» или «f», в результате чего для переменной было установлено значение true или false.

Теперь мне интересно, можно ли эффективно читать числа из текстового файла и передавать их в int? Все, о чем я могу думать, это проверять строку «1» и возвращать 1 в функции, но это должно быть сделано для каждого возможного целого числа, которое я мог бы ожидать в своей программе, что не является эффективным решением.

Для контекста я пытаюсь создать систему сохранения для игры, и int s / float s, которые будут считываться, будут такими переменными, как здоровье игрока, сколько у него предметов, и т. Д. c ,

Ответы [ 2 ]

1 голос
/ 21 января 2020

Если вы уже знаете, как читать строку str из текстового файла, чтение чисел не так сложно: просто прочитайте строку, как вы, и используйте stoi(), чтобы преобразовать строку в int или stof() в float.

int i; double d; 
i=stroi(str); d=strod(str2);

Другой метод заключается в использовании файловых потоков для точного чтения или записи из файла как вы сделали бы из cin и cout:

ifstream file("mytext.txt"); 
file>>i>>d;  

Предыдущий метод не очень заботится о строках. Так что еще один метод - прочитать строку, преобразовать ее в поток строки и использовать поток строки, как если бы вы использовали cin:

if (getline(file, str)){   // read a full line 
    stringstream sst(str); 
    sst>>i>>d;
} 
0 голосов
/ 21 января 2020

Использование std::fstream. Вы можете открыть файл и выполнить потоковый ввод или вывод в зависимости от того, как вы открыли файл.

Пример:

#include <iostream>
#include <fstream>

int main(int argc, char** argv)
{
    // Pretend we are passed the file location as a command-line argument to our program:

    std::fstream file { argv[1], std::ios::in };

    if (file.is_open())
    {
        int value;
        file >> value;

        std::cout << value << std::endl;
    }
    else
    {
        std::cout << "Could not open file " << argv[1] << std::endl;
    }
}

При условии, что информация правильно отформатирована в файле, это должно работать .

Я не запускал его, поэтому могут быть синтаксические ошибки, но основы есть. Проверьте cppreference за помощью, у них будут другие примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...