العودة إلى الدورة

إدخال وإخراج الملفات الجزء 5: الإدخال والإخراج المنسق (fprintf, fscanf)

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 51: إدخال وإخراج الملفات الجزء 5: الإدخال والإخراج المنسق (fprintf, fscanf)

هذه الدوال هي المكافئات لـ printf و scanf في تدفقات الملفات، مما يسمح لك بقراءة وكتابة البيانات المنسقة (أعداد صحيحة، أرقام عشرية، سلاسل منسقة) بسهولة.

كتابة بيانات منسقة: fprintf()

تكتب مخرجات منسقة في التدفق المحدد.

القاعدة: int fprintf(FILE *stream, const char *format, ...);

c #include <stdio.h>

struct Data { int id; float amount; }; struct Data record = {123, 50.75};

FILE *fp = fopen("records.txt", "w");

if (fp != NULL) { // كتابة بيانات منظمة مفصولة بفواصل fprintf(fp, "ID: %d, Amount: %.2f\n", record.id, record.amount); fclose(fp); }

قراءة بيانات منسقة: fscanf()

تقرأ مدخلات منسقة من التدفق المحدد.

القاعدة: int fscanf(FILE *stream, const char *format, ...);

تذكير حاسم: تماماً مثل scanf ، تتطلب fscanf عناوين (&) المتغيرات لتخزين البيانات.

c FILE *fp = fopen("records.txt", "r"); int read_id; float read_amount;

if (fp != NULL) { // يجب مطابقة التنسيق المتوقع تماماً (مثلاً تخطي 'ID: '، الفاصلة، إلخ) int items_read = fscanf(fp, "ID: %d, Amount: %f\n", &read_id, &read_amount);

if (items_read == 2) {
    printf("تمت قراءة المعرف %d والمبلغ %.2f بنجاح\n", read_id, read_amount);
}
fclose(fp);

}

قيود: دالة fscanf حساسة للتغييرات في التنسيق (مثل المسافات الزائدة أو الفواصل المفقودة) وهي سيئة بشكل عام في التعامل مع الأسطر التي تحتوي على سلاسل نصية بها مسافات، مما يجعلها أقل قوة من fgets لقراءة ملفات النصوص العامة.