Есть ли функция, которая возвращает символ/строку в определенной точке файла .txt?

StackOverflow https://stackoverflow.com/questions/823283

Вопрос

Я знаю, что можно получить часть .txt, затем преобразовать ее в целое число, а затем сохранить в переменной, но возможно ли это сделать в одном объявлении.(Переменная должна быть глобальной).

Т.е.:

[data.txt]
1020
[convert_data.cpp]
#include<fstream>
fstream convert("data.txt");
//way to declare something equal to A PARTICULAR POINT in data.txt

int main()
{
    //how would I take this block of code and simplify it to two DECLARATIONS (not
    //function calls), or, if that's not possible or not practical, how would I make
    //n and m (or var1 and var2) global AND CONSTANT?
    char var1[5];
    convert.getline(var1,2);
    char var2[5];
    convert.getline(var2,2);
    const int n=atoi(var1);
    const int m=atoi(var2);
    return 0;
}
Это было полезно?

Решение

Нет, вы не можете сделать это в одном объявлении.Вы можете написать функцию для этого, а затем инициализировать локальные переменные с помощью этой функции, но вы не можете инициализировать с ее помощью глобальные переменные.Если вы хотите инициализировать глобальные переменные, вам нужно будет сделать это явно во время процедуры инициализации вашей программы или вы можете сделать это в конструкторе глобального объекта (не рекомендуется).

Другие советы

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

Сказав это, вы мог сделайте что-то вроде этого:

class ConstInteger {
public:
    ConstInteger(fstream &f) {
        char s[5];
        f.getline(s,2);
        value = atoi(s);
    }
    public operator int() const { return value; }
private:
    int value;
};

fstream convert("data.txt");
ConstInteger n(convert);

Вышеуказанное основано на инициализации, которую компилятор C++ выполняет для глобальных классов.В результате вы в значительной степени зависите от компилятора C++ в отношении порядка инициализации классов.Кроме того, обработка ошибок в такой схеме может быть затруднительной.(Например, что произойдет, если data.txt не существует?)

Если я правильно понимаю, вы хотите прочитать часть текстового файла и сохранить значение как константу?Ну, вы не можете иметь неинициализированную константу - то есть глобальное объявление, которому вы назначаете во время выполнения.

Возможно, способ сделать это - инкапсулировать эту функциональность, которая у вас есть, в глобальную функцию, называемую, скажем, getConstant, она может содержать статическую переменную, и вызов getConstant проверит, была ли переменная прочитана из файла, и если она была затем возвращена константа, если не считывается из файла.Ленивая оценка.Конечно, это не решает проблему необходимости (?) быть постоянным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top