هل هناك دالة تقوم بإرجاع الطابع / السلسلة عند نقطة في. TXT؟

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

سؤال

وأنا أعرف من الممكن للحصول على جزء من 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;
}
هل كانت مفيدة؟

المحلول

لا، لا يمكنك أن تفعل ذلك في إعلان واحد. يمكنك كتابة دالة للقيام بذلك، وبعد ذلك يمكنك تهيئة المتغيرات المحلية مع تلك الوظيفة، ولكن لا يمكنك تهيئة المتغيرات العالمية معها. إذا كنت ترغب في تهيئة المتغيرات العالمية، وسوف تحتاج إلى القيام بذلك بشكل واضح أثناء إجراء التهيئة البرنامج الخاص بك، أو يمكنك أن تفعل ذلك في منشئ كائن العالمي (غير مستحسن).

نصائح أخرى

من وجهة نظر المترجم، و<م> ثابت هو شيء له قيمة ثابتة في وقت الترجمة. منذ كنت تقرأ البيانات من ملف نصي (والتي يمكن تغييرها بعد أن تم ترجمة البرنامج)، والأرقام التي القراءة من ملف نصي لا يمكن أن تكون الثوابت في البرنامج.

وأما وقد قلت ذلك، وكنت <م> قد تفعل شيئا مثل هذا:

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

وهذا يعتمد فوق على initialisation مترجم C ++ لا لفئات العالمية. ونتيجة لهذا، كنت إلى حد كبير تحت رحمة مترجم C ++ مع الاحترام للنظام الطبقة initialisation. أيضا، قد يكون التعامل مع هذا الترتيب في خطأ مزعجة. (على سبيل المثال، ماذا يحدث إذا لم يكن موجودا data.txt؟)

إذا فهمت بشكل صحيح كنت تريد قراءة في جزء من ملف نصي وتخزين القيمة ك ثابت؟ كذلك لا يمكن أن يكون ثابت غير مهيأ - حتى إعلان العالمي الذي قمت تعيين في وقت التشغيل

.

ولعل طريقة للقيام بذلك هو تغليف هذه الوظيفة أن يكون لديك في دالة عمومية تسمى يقول getConstant، وهذا يمكن أن تحتوي على متغير ثابت والدعوة إلى getConstant أن تحقق إذا كان قد تم قراءة فار من الملف، إذا كان لديه ثم العودة ثابت، إذا لم يقرأ في من الملف. تقييم كسول. بالطبع هذا لا يحل مسألة من ذلك الحاجة (؟) أن يكون ثابتا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top