Gibt es eine Funktion, die die Zeichen / Zeichenfolge an einem Punkt in einer .txt zurückkehrt?

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

Frage

ich weiß, seine möglich, einen Teil einer .txt zu bekommen, dann wandeln sie in einer ganzen Zahl, dann speichern Sie es in einer Variablen, aber ist es möglich, der in einer einzigen Erklärung. (Die Variable muss global sein).

Dh:

[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;
}
War es hilfreich?

Lösung

Nein, man kann es in einer einzigen Erklärung nicht. Sie können eine Funktion schreiben, das zu tun, und dann können Sie lokale Variablen mit dieser Funktion initialisieren, aber Sie können globale Variablen mit nicht initialisiert werden. Wenn Sie globale Variablen initialisieren möchten, müssen Sie explizit tun, während Ihres Programms Initialisierungsroutine, oder man könnte es im Konstruktor eines globalen Objekt tun (nicht empfohlen).

Andere Tipps

Aus der Sicht des Compilers, ein Konstante ist etwas, das einen festen Wert zum Zeitpunkt der Kompilierung hat. Da Sie Ihre Daten aus einer Textdatei zu lesen (die geändert werden können, nachdem das Programm kompiliert wurde), die Zahlen lesen Sie aus der Textdatei nicht Konstanten in Ihrem Programm sein kann.

Having said that, Sie könnte etwas tun, wie folgt aus:

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

Das beruht oben auf der Initialisierung der C ++ Compiler für globale Klassen der Fall ist. Als Folge davon sind Sie weitgehend auf der Gnade der C ++ Compiler in Bezug auf Klasse Initialisierung Ordnung. Auch Fehler in dieser Anordnung können die Handhabung problematisch sein. (Zum Beispiel, was passiert, wenn data.txt nicht existiert?)

Wenn ich das richtig verstanden, Sie in Teil einer Textdatei lesen möchten und den Wert als Konstante? Nun, Sie können nicht eine nicht initialisierte Konstante haben - so eine globale Erklärung, auf die Sie zuordnen zur Laufzeit

.

Vielleicht ist die Art und Weise zu tun, ist es, dass die Funktionalität kapselt, die Sie in einer globalen Funktion namens getConstant sagen, dies ist eine statische Variable und den Anruf zu getConstant enthalten könnte, würde überprüfen, ob die var aus der Datei gelesen wurden, wenn es hat dann die konstante zurückkehren, wenn nicht aus der Datei eingelesen. Verzögerte Auswertung. Natürlich ist dies das Problem der nicht zu lösen braucht (?) Konstant ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top