Есть ли функция, которая возвращает символ / строку в точке .txt? - PullRequest
0 голосов
/ 05 мая 2009

Я знаю, что можно получить часть .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;
}

Ответы [ 3 ]

0 голосов
/ 05 мая 2009

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

0 голосов
/ 05 мая 2009

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

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

0 голосов
/ 05 мая 2009

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

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

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 не существует?)

...