Pregunta

Sé que es posible obtener una parte de un .txt, luego convertirlo en un entero, luego almacenarlo en una variable, pero es posible hacerlo en una sola declaración. (La variable debe ser global).

Es decir:

[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;
}
¿Fue útil?

Solución

No, no puedes hacerlo en una sola declaración. Puede escribir una función para hacer eso, y luego puede inicializar variables locales con esa función, pero no puede inicializar variables globales con ella. Si desea inicializar variables globales, deberá hacerlo explícitamente durante la rutina de inicialización de su programa, o podría hacerlo en el constructor de un objeto global (no recomendado).

Otros consejos

Desde el punto de vista del compilador, una constante es algo que tiene un valor fijo en tiempo de compilación. Dado que está leyendo sus datos de un archivo de texto (que se puede cambiar después de que se haya compilado el programa), los números que lee del archivo de texto no pueden ser constantes en su programa.

Habiendo dicho eso, podrías hacer algo como esto:

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);

Lo anterior se basa en la inicialización que hace el compilador de C ++ para las clases globales. Como consecuencia de esto, está en gran medida a merced del compilador de C ++ con respecto al orden de inicialización de clase. Además, el manejo de errores en este arreglo puede ser problemático. (Por ejemplo, ¿qué sucede si data.txt no existe?)

¿Si entiendo correctamente, desea leer parte de un archivo de texto y almacenar el valor como una constante? Bueno, no puede tener una constante sin inicializar, por lo tanto, una declaración global a la que asigna en tiempo de ejecución.

Quizás la forma de hacerlo es encapsular esa funcionalidad que tiene en una función global llamada sayConstant, esto podría contener una variable estática y la llamada a getConstant verificaría si la var ha sido leída del archivo, si tiene luego devuelve la constante, si no se lee desde el archivo. Evaluación perezosa. Por supuesto, esto no resuelve el problema de que la necesidad (?) Sea constante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top