English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل تعليمي أساسي بلغة C

تحكم عملية لغة C

الوظائف في لغة C

المسافات في لغة C

المراجع في لغة C

السلاسل في لغة C

مباني لغة C

ملفات لغة C

C أخرى

دليل مرجع لغة C

استخدام دالة vfprintf() في مكتبة C مع أمثلة

مكتبة القياسية - <stdio.h>

دالة مكتبة C int vfprintf(FILE *stream, const char *format, va_list arg) إرسال输出来 إلى تيار stream باستخدام قائمة المعلمات.

الإعلان

إليك إعلان دالة vfprintf().

int vfprintf(FILE *stream, const char *format, va_list arg)

المواصفات

  • stream -- هذا هو سلسلة الإشارة إلى عمود FILE، الذي يعرف التيار.
  • format -- هذا هو سلسلة C، تحتوي على النص الذي سيتم كتابته في تيار stream. يمكن أن يحتوي على علامات format المدمجة، والتي يمكن استبدالها بالقيم المحددة في الفواصل المضافة لاحقاً وفقًا للتحديد. خصائص علامة format هي %[flags][width][.precision][length]specifier،شرح تفصيلي كالتالي:
specifier (الوصف)إخراج
cحرف
d أو iعدد عشري سالب
eنظام العدد العلمي باستخدام حرف e (الجزء العددي والمعامل)
Eنظام العدد العلمي باستخدام حرف E (الجزء العددي والمعامل)
fعدد عشري عكسي
gاختيار التمثيل المناسب بين %e أو %f تلقائيًا
Gاختيار التمثيل المناسب بين %E أو %f تلقائيًا
oعشري سالب
sالنص المكون من حرف
uعدد عشري
xعدد عشري غير سالب
Xعدد عشري غير سالب (أحرف كبيرة)
pعنوان الإشارة
nلا يوجد مخرج
%حرف

flags (العلامات)الوصف
-تحديد التوجيه إلى اليسار داخل عرض الحقل المحدد، بشكل افتراضي يتم التوجيه إلى اليمين (انظر إلى ملاحظة width الفرعية).
+إجبار على عرض إشارة إيجابية أو سالبة (+ أو -) أمام النتيجة، أي سيتم عرض إشارة إيجابية أمام العدد الإيجابي. بشكل افتراضي، سيتم عرض إشارة سالبة أمام العدد السالب فقط.
(space)إذا لم يتم كتابة أي رمز، سيتم إدراج فراغ أمام القيمة.
#عند استخدامه مع o، x أو X، سيتم عرض 0، 0x أو 0X أمام القيمة غير الصفرية.
عند استخدامه مع e، E، أو f، سيتم إجبار على إخراج نقطة عشرية، حتى لو لم يكن هناك أرقام بعد ذلك. بشكل افتراضي، إذا لم يكن هناك أرقام بعد ذلك، لن يتم عرض النقطة العشرية.
عند استخدامه مع g أو G، فإن النتيجة تكون مثل استخدام e أو E، ولكن لن يتم إزالة الصفر النهائي.
0وضع صفر (0) على يسار الرقم المحدد للملء بدلاً من الفراغ (انظر إلى ملاحظة width الفرعية).

width (العرض)الوصف
(number)عدد الحروف التي سيتم إخراجها. إذا كانت القيمة المكتوبة أقصر من هذا الرقم، سيتم تعبئة النتيجة بمقدار الترقيم الأولي. إذا كانت القيمة المكتوبة أطول من هذا الرقم، لن يتم قطع النتيجة.
*العرض لم يتم تحديده في نطاق format، ولكنه سيتم وضع كمعامل عدد صحيح إضافي قبل المعامل الذي سيتم تشكيله.

.precision (الدقة)الوصف
.numberللمعرفات الصحيحة للعدد (d،i،o،u،x،X): تحديد دقة يحدد عدد الأرقام الأدنى الذي يجب كتابته. إذا كان القيمة المكتوبة أقصر من هذا الرقم، سيتم تعبئة النتيجة بمقدار الترقيم الأولي. إذا كانت القيمة المكتوبة أطول من هذا الرقم، لن يتم قطع النتيجة. الدقة 0 تعني عدم كتابة أي حروف.
للنوع e و E و f: عدد الأرقام بعد نقطة العشرية التي سيتم إخراجها.
للنوع g و G: عدد الأرقام الفعالة التي سيتم إخراجها.
للنوع s: عدد الحروف التي سيتم إخراجها.
للنوع c: لا يؤثر.
عند عدم تحديد أي دقة، يتم تعيين القيمة الافتراضية إلى 1. إذا لم يتم تحديدها مع قيمة صريحة، يتم افتراضها كـ 0.
.*الدقة لم تُحدد في سلسلة النص format، ولكن سيتم وضعها كمعامل إضافي كامل قبل المعاملات التي سيتم تنسيقها.

length (الطول)الوصف
hتُفسر المعلمة كـ نوع قصير أو نوع غير معين قصير (يُستخدم فقط مع وسم معرفات الأعداد الصحيحة: i،d،o،u،x و X).
lتُفسر المعلمة كـ نوع طويل أو نوع طويل غير معين، ويُستخدم مع وسم معرفات الأعداد الصحيحة (i،d،o،u،x و X) وكذلك وسم c (يعبر عن حرف عريض) و s (يعبر عن سلسلة من الحروف العريضة).
Lتُفسر المعلمة كـ نوع طويل الثمانية (يُستخدم فقط مع وسم معرفات الأعداد العشرية: e،E،f،g و G).
  • arg -- يشير إلى كائن يمثل قائمة من المعلمات المتغيرة. يجب على وسم va_start تحديد هذا الكائن.

القيمة المعدة

إذا كانت النتيجة ناجحة، فإنها تعود عدد الحروف المكتوبة، وإلا تعود رقم سلبي.

مثال عبر الإنترنت

إليك مثالًا على استخدام vfprintf()

#include <stdio.h>
#include <stdarg.h>
void WriteFrmtd(FILE *stream, char *format, ...)
{
   va_list args;
   va_start(args, format);
   vfprintf(stream, format, args);
   va_end(args);
{}
int main ()
{
   FILE *fp;
   fp = fopen("file.txt","w");
   WriteFrmtd(fp, "This is just one argument %d \n", 10);
   fclose(fp);
   return(0);
{}

دعونا نحضر ونشغل البرنامج المذكور أعلاه، مما سيفتح الملف في الدليل الحالي file.txt، وكتابة النص التالي:

هذا مجرد دليل واحد 10

الآن دعونا نستخدم البرنامج التالي لعرض محتويات الملف المذكور أعلاه:

#include <stdio.h>
int main ()
{
   FILE *fp;
   int c;
   fp = fopen("file.txt","r");
   while(1)
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
          break ;
      {}
      printf("%c", c);
   {}
   fclose(fp);
   return(0);
{}

مكتبة القياسية - <stdio.h>