Domanda

So che è possibile ottenere una parte di un .txt, quindi convertirlo in un numero intero, quindi memorizzarlo in una variabile, ma è possibile farlo in una singola dichiarazione. (La variabile deve essere 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;
}
È stato utile?

Soluzione

No, non puoi farlo in una singola dichiarazione. È possibile scrivere una funzione per farlo, quindi è possibile inizializzare le variabili locali con quella funzione, ma non è possibile inizializzare le variabili globali con essa. Se vuoi inizializzare le variabili globali, dovrai farlo esplicitamente durante la routine di inizializzazione del tuo programma, oppure potresti farlo nel costruttore di un oggetto globale (non raccomandato).

Altri suggerimenti

Dal punto di vista del compilatore, una costante è qualcosa che ha un valore fisso al momento della compilazione. Poiché stai leggendo i tuoi dati da un file di testo (che può essere modificato dopo la compilazione del programma), i numeri che leggi dal file di testo non possono essere costanti nel tuo programma.

Detto questo, potresti fare qualcosa del genere:

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

Quanto sopra si basa sull'inizializzazione del compilatore C ++ per le classi globali. Di conseguenza, si è in gran parte in balia del compilatore C ++ rispetto all'ordine di inizializzazione della classe. Inoltre, la gestione degli errori in questa disposizione può essere problematica. (Ad esempio, cosa succede se data.txt non esiste?)

Se ho capito bene vuoi leggere parte di un file di testo e memorizzare il valore come costante? Beh, non puoi avere una costante non inizializzata, quindi una dichiarazione globale a cui assegni in fase di esecuzione.

Forse il modo per farlo è incapsulare quella funzionalità che hai in una funzione globale chiamata dire getConstant, questo potrebbe contenere una variabile statica e la chiamata a getConstant verificherebbe se il var è stato letto dal file, se ha quindi restituisce la costante, se non viene letta dal file. Valutazione pigra. Naturalmente questo non risolve il problema per cui è necessario (?) Essere costante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top