البرمجة

تحقيق نسخ السطور بشرط معين في C++

لديك بعض الأخطاء في الشفرة التي تحتاج إلى تصحيح. في البداية، لديك شرط غير صحيح لفحص إذا كانت السطر يحتوي على “add” في myfile2، كما أنك تقوم بفتح outputFile داخل الحلقة، مما يؤدي إلى فتحها مرارًا وتكرارًا مع كل دورة من الحلقة دون أن تكون هناك محاولة حقيقية لقراءة البيانات من myfile2.

لتحقيق الغرض المطلوب، يمكنك تحسين الشفرة كما يلي:

cpp
#include #include #include using namespace std; int main() { fstream myfile1("datafile1.txt"); //this just has a bunch of names in it fstream myfile2("cmdfile1.txt"); //has commands like "add bobby bilbums" ofstream outputFile("outfile1.txt"); //I want to take the "add bobby" command and copy the name into this new file. string line; if (myfile1.is_open() && myfile2.is_open() && outputFile.is_open()) // Check if all files are open { while (getline(myfile2, line)) // Read each line from myfile2 { if (line.find("add") != string::npos) // Check if the line contains "add" { outputFile << line << endl; // Write the line to outputFile } } } else { cout << "Failed to open one or more files!" << endl; } cout << "\nPress Enter..."; cin.ignore(); outputFile.close(); myfile2.close(); myfile1.close(); return 0; }

هذه الشفرة البرمجية تقوم بفتح كل من myfile1 و myfile2 و outputFile، ثم تقرأ كل سطر من myfile2، وإذا كان السطر يحتوي على “add”، فإنها تكتب السطر إلى outputFile. يرجى ملاحظة أنه يتم فحص فتح الملفات في البداية، وفي حالة عدم النجاح، يتم طباعة رسالة خطأ.

المزيد من المعلومات

بالتأكيد! الشفرة التي كتبتها تحتوي على العديد من الأخطاء التي يجب معالجتها لجعلها تعمل بشكل صحيح.

أولاً، في السطر:

cpp
if (myfile2, line == "add");

هذا الشرط لن يعمل كما تتوقع، بل يحتاج إلى تغيير. يجب استخدام getline لقراءة السطر من myfile2، ثم التحقق مما إذا كان يحتوي على “add” أو لا.

ثانيًا، في السطر:

cpp
outputFile.is_open();

هذا السطر لا يفعل شيئًا، بل يجب استخدامه للتحقق من فتح ملف outputFile بنجاح.

ثالثًا، الحلقة التي تقرأ الملفات تحتاج إلى تحقق من نجاح فتح الملفات قبل البدء في القراءة والكتابة. ويفضل استخدام getline لقراءة السطور من الملفات بدلاً من تجاهل السطور بأكملها.

رابعًا، لا تحتاج إلى استخدام cin.ignore() في هذه الحالة، لأنه لا يوجد إدخال مستخدم بعد الكتابة إلى outputFile.

وأخيرًا، يُنصح دائمًا بإغلاق الملفات بعد الانتهاء من استخدامها باستخدام close().

تحتوي الشفرة التي كتبتها على العديد من الأخطاء التي يجب تصحيحها لجعلها تعمل كما هو متوقع.

زر الذهاب إلى الأعلى