Existe-t-il une fonction qui renvoie le caractère / la chaîne en un point du fichier .txt?

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

Question

Je sais qu'il est possible d'obtenir une partie d'un fichier .txt, puis de le convertir en entier, puis de le stocker dans une variable, mais est-il possible de le faire dans une seule déclaration. (La variable doit être globale).

Ie:

[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;
}
Était-ce utile?

La solution

Non, vous ne pouvez pas le faire en une seule déclaration. Vous pouvez écrire une fonction pour le faire, puis initialiser des variables locales avec cette fonction, mais vous ne pouvez pas initialiser de variables globales avec cette fonction. Si vous souhaitez initialiser des variables globales, vous devrez le faire explicitement au cours de la routine d’initialisation de votre programme, ou dans le constructeur d’un objet global (non recommandé).

Autres conseils

Du point de vue du compilateur, une constante est quelque chose qui a une valeur fixe au moment de la compilation. Puisque vous lisez vos données à partir d’un fichier texte (qui peut être modifié après la compilation du programme), les chiffres que vous lisez à partir du fichier texte ne peuvent pas être des constantes de votre programme.

Cela dit, vous pouvez faire quelque chose comme ceci:

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

Ce qui précède repose sur l'initialisation du compilateur C ++ pour les classes globales. En conséquence, vous êtes largement à la merci du compilateur C ++ en ce qui concerne l'ordre d'initialisation des classes. De plus, le traitement des erreurs dans cet arrangement peut être gênant. (Par exemple, que se passe-t-il si data.txt n'existe pas?)

Si je comprends bien, vous voulez lire une partie d'un fichier texte et stocker la valeur sous forme de constante? Eh bien, vous ne pouvez pas avoir une constante non initialisée - donc une déclaration globale à laquelle vous affectez à l'exécution.

La façon de le faire consiste peut-être à encapsuler la fonctionnalité que vous avez dans une fonction globale appelée getConstant, elle pourrait contenir une variable statique et l'appel à getConstant vérifierait si la var a été lue dans le fichier, le cas échéant. puis retourne la constante, si elle n'est pas lue dans le fichier. Évaluation paresseuse. Bien sûr, cela ne résout pas le problème de la nécessité (?) D'être constant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top