كيفية إنهاء الخط في ++ c


الاجابه 1:

تتمثل إحدى الطرق التي قد لا تكون إجابة حقيقية على السؤال في استخدام tellg () لتحديد حجم الملف ثم تتبع عدد الأحرف التي تمت قراءتها والتوقف عند قراءة الحجم الكامل للملف.

إحدى المشكلات المتعلقة باستخدام EOF التي وجدتها هي أنني أعتقد أن EOF لا يتم إرجاعه حتى تحاول قراءة الحرف الأول بعد الحرف الأخير. أود أيضًا أن أطلب من الخيط ما هي أفضل طريقة لتحديد EOF إذا كانت بياناتك غير متجانسة ، لقد تلقيت عددًا من المراجعات الفنية عبر الإنترنت لقراءة كل من رسائل التبادل التجاري و MP4 وفي كلتا الحالتين هناك سلاسل وأعداد صحيحة مختلطة في الملفات الثنائية بحيث ينتهي بك الأمر بالحصول على عدة مكالمات ifstream :: read (char *، size) والتي تحتاج جميعها إلى المعالجة من أجل EOF للتعامل مع الحالة التي لا يكتمل فيها الملف. IE ليس لديه "سجل" كامل في النهاية. السبب الذي يجعلني أقترح هذا الأسلوب هو أنه عند قراءة الحرف الأخير ، يمكنك بالفعل تحديد EOF من خلال المقارنة بالحجم الكامل للملف حيث تحتاج إلى الرجوع إلى الحرف الأخير كما هو الحال مع EOF.

أفضل حل يمكنني الحصول عليه الآن هو إنشاء وظيفة غلاف تقوم بتنفيذ ifstream :: read () وتلقي استثناءً للإشارة إلى eof. هذا يعني أن كلاً من السلسلة تمت قراءتها والعدد الصحيح الذي تمت قراءته ، وإذا كان لديك قراءة عائمة ، فسوف تستدعي جميعًا وظيفة التضمين المحمية باستثناء طرح EOF أو عند قراءة الحجم الكامل للملف.


الاجابه 2:

باستخدام تيارات:

نهاية السطر - std :: getline

نهاية الملف - استخدم std :: basic_istream :: rdbuf للحصول على Streambuf وكتابته على std :: stringstream ، ثم احصل على السلسلة

أمثلة:

#تضمن #تضمن #تضمن int main (int argc، char ** argv){ إذا (argc <2) { std :: cerr << "عدد غير صالح من الوسائط" << std :: endl؛ العودة 1 ؛ } std :: string fileName {argv [1]} ؛ std :: ifstream المدخلات (اسم الملف) ؛ إذا (! input.good ()) { std :: cerr << "تعذر فتح الملف" << std :: endl؛ } الأمراض المنقولة جنسيا :: خط السلسلة ؛ std :: getline (إدخال ، سطر) ؛ std :: cout << "السطر الأول:" << line << std :: endl؛ input.seekg (0) ؛ محتويات السلسلة ؛ { الأمراض المنقولة جنسيا :: إخراج ostringstream ؛ الإخراج << input.rdbuf () ؛ المحتويات = output.str () ؛ } std :: cout << "المحتويات الكاملة:" << المحتويات << std :: endl؛ العودة 0 ؛}

الاجابه 3:

كما قال سيرجي زوبكوف ، إذا كنت تريد قراءة سطر ما ، فاستخدم وظيفة تتوقف عند انتهاء الملف. على سبيل المثال ، يمكن القيام بذلك على هذا النحو.

#تضمن #تضمن استخدام اسم للمحطة؛ انت مين(){ سلاسل؛ بينما (سينما) { cout << s << endl؛ }العودة 0 ؛}

للقراءة حتى نهاية السطر ، استخدم std :: getline.

#تضمن #تضمن استخدام اسم للمحطة؛ انت مين(){ سلاسل؛ while (std :: getline (std :: cin، s)) { cout << s << endl؛ }العودة 0 ؛}

الاجابه 4:

لقراءة الملف حتى نهايته في C ++ ، يمكنك استخدام أي دالة إدخال حتى تُرجع خطأ:

#تضمن #تضمن انت مين(){ std :: ifstream f ("thefile.txt")؛الأمراض المنقولة جنسيا :: ناقلات الخامس؛ لـ (int n؛ f >> n؛) v.push_back (ن) ؛}

عرض حي (مع الإخراج):

عارض كوليرو

أو ، للحصول على مظهر إضافي ، يمكنك تفسير ملفك على أنه سلسلة من الأعداد الصحيحة وتحويل تسلسل إلى آخر:

#تضمن #تضمن #تضمن انت مين(){ std :: ifstream f ("thefile.txt")؛الأمراض المنقولة جنسيا :: ناقلات الخامس {الأمراض المنقولة جنسيا :: istream_iterator (F)، {} }؛}

عرض حي (مع الإخراج):

عارض كوليرو

ملاحظة: سعيد لم ينشر أحد أيًا من ذلك بينما (! file.eof ()) هراء


الاجابه 5:

استخدم std :: ifstream :: read (char * s، streamsize n).

هذه صفحة مرجعية جيدة ، مع مثال رمز وكل شيء:

istream :: read - مرجع C ++