سؤال

في الأساس ، أواجه مشاكل في الكود الخاص بي - هذا هو الواجب المنزلي ، لذا فإن عدم نشره هنا لأسباب واضحة. إذا أصبح من المهم حقًا بالنسبة لي أن أفعل ذلك ، فسيتعين عليّ أن أكون عالقًا جدًا.

أنا أقرأ ملفين نصين ولديه أيضًا فاصل ، تأتي هذه القيم من سطر الأوامر ، فقط افترض أن الفاصل في هذه الحالة هو xx

File a
a
b
c


File b
d
e

Output should be
axxd
bxxe
cxx

المشكلة هي أن الكود الخاص بي لا يفعل السطر الأخير بشكل صحيح

أحصل على إخراج من

axxd
bxxe

آمل أن تتمكن من جمع ما أفعله خطأً دون أن أقوم بنشر كل الكود الخاص بي ، لكن منطقي يعمل في هذا المبدأ ؛

while not at the end of the file for files a and b
    get a line using fgets from a
    create a character pointer and set it to the first occurrence of \n in the line using strchr
    if the pointer isn't null
        set the pointers value to be the end of line

get the line from b as above
and now write the line from a, the separator and the line from b to file
هل كانت مفيدة؟

المحلول

هذه هي مشكلتك المنطقية الأولى: while(!feof(a) && !feof(b))

هذا يعني أنه إذا أيضاً وصل الملف إلى النهاية ثم تتوقف عن المعالجة ، حتى لو كان هناك المزيد من الخطوط في الملف الآخر.

نصائح أخرى

ربما لا تقوم بطباعة خط جديد بعد طباعة السطر الأخير؟ ثم قد لا يتم عرضه على شاشتك على الإطلاق. لاحظ أن FGETS يضع فقط خطًا جديدًا في المخزن المؤقت إذا كان الخط الأصلي يحتوي على خط آخر وقد لا يكون السطر الأخير من الملف.

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