وصف وظيفة Scanf C
وصف وظيفة Scanf C

فيديو: وصف وظيفة Scanf C

فيديو: وصف وظيفة Scanf C
فيديو: المجازفة في الاستثمار لها قواعد...5 خطوات لمجازفة تعود عليك بالربح #fifreedomtoday #كريبتو #استثمار 2024, شهر نوفمبر
Anonim

في هذه المقالة ، يتم النظر في وظيفة scanf () بشكل عام دون الرجوع إلى معيار معين ، لذلك يتم تضمين البيانات من أي معايير C99 و C11 و C ++ 11 و C ++ 14 هنا. ربما ، في بعض المعايير ، تعمل الوظيفة مع اختلافات عن المواد المعروضة في المقالة.

Scanf C وظيفة - الوصف

scanf () هي وظيفة موجودة في ملفات الرأس stdio.h (C) و cstdio (C ++) ، والمعروفة أيضًا باسم إدخال البرنامج المنسق. يقرأ scanf الأحرف من تدفق الإدخال القياسي (stdin) ويحولها وفقًا للتنسيق ، ثم يكتبها إلى المتغيرات المحددة. التنسيق - يعني أن البيانات يتم تحويلها إلى نموذج معين عند الاستلام. وبالتالي ، يتم وصف وظيفة scanf C:

scanf ("تنسيق٪" ، & متغير 1 [، & متغير 2 ، […]) ،

حيث يتم تمرير المتغيرات كعناوين. السبب في هذه الطريقة في تمرير المتغيرات إلى وظيفة ما واضح: كنتيجة للعمل ، فإنها تُرجع قيمة تشير إلى وجود أخطاء ، لذلكالطريقة الوحيدة لتغيير قيم المتغيرات هي المرور بالعنوان. أيضًا ، بفضل هذه الطريقة ، يمكن للوظيفة معالجة البيانات من أي نوع.

يشير بعض المبرمجين إلى وظائف مثل scanf () أو printf () كإجراءات بسبب التشابه مع اللغات الأخرى.

Scanf يسمح بإدخال جميع أنواع اللغات الأساسية: char ، int ، float ، string ، إلخ. في حالة متغيرات نوع السلسلة ، ليست هناك حاجة لتحديد علامة العنوان - "&" ، لأن متغير سلسلة النوع عبارة عن مصفوفة ، واسمها هو عنوان العنصر الأول من المصفوفة في ذاكرة الكمبيوتر

استخدام لغة C في ++ C
استخدام لغة C في ++ C

تنسيق إدخال البيانات أو سلسلة التحكم

ابدأ بالنظر إلى مثال وظيفة scanf C من الوصف.


تتضمن int main () {int x؛ بينما (scanf ("٪ d"، & x)==1) printf ("٪ d / n"، x) ؛ العودة 0 ؛ // متطلبات أنظمة لينكس}

تنسيق الإدخال يتكون من المعلمات الأربعة التالية:٪ [العرض] [المعدلات] النوع. في هذه الحالة ، تعد علامة "٪" والنوع معلمات إلزامية. أي أن الحد الأدنى للتنسيق يبدو كالتالي: "٪ s" و "٪ d" وما إلى ذلك.

بشكل عام ، يتم تقسيم الأحرف التي تتكون منها سلسلة التنسيق إلى:

  • محددات التنسيق - أي شيء يبدأ بـ٪ ؛
  • أحرف فاصلة أو مسافات - هي مسافة ، علامة تبويب ( t) ، سطر جديد ( n) ؛
  • حرفًا بخلاف المسافة البيضاء.

قد لا تكون الوظيفة آمنة.

استخدم scanf_s () بدلاً من scanf ().

(رسالة من Visual Studio)

محددات النوع أو التنسيق أو أحرف التحويل أو أحرف التحكم

كود ثنائي
كود ثنائي

يجب أن يحتوي إعلان scanf C على الأقل على محدد تنسيق ، والذي يتم تحديده في نهاية التعبيرات التي تبدأ بـ "٪". يخبر البرنامج نوع البيانات التي يتوقعها عند الدخول ، عادة من لوحة المفاتيح. قائمة بجميع محددات التنسيق في الجدول أدناه.

النوع المعنى
1 ٪ c البرنامج ينتظر إدخال شخصية. يجب أن يكون المتغير المراد كتابته من نوع الحرف char.
2 ٪ d البرنامج يتوقع إدخال عدد عشري من نوع صحيح. يجب أن يكون المتغير من النوع int.
3 ٪ i البرنامج يتوقع إدخال عدد عشري من نوع صحيح. يجب أن يكون المتغير من النوع int.
4 ٪ e ،٪ E يتوقع البرنامج إدخال رقم فاصلة عائمة (فاصلة) في شكل أسي. يجب أن يكون المتغير من النوع float.
5 ٪ f البرنامج يتوقع رقم فاصلة عائمة (فاصلة). يجب أن يكون المتغير من النوع float.
6 ٪ g ،٪ G البرنامج يتوقع رقم فاصلة عائمة (فاصلة).يجب أن يكون المتغير من النوع float.
7

٪ a

البرنامج يتوقع رقم فاصلة عائمة (فاصلة). يجب أن يكون المتغير من النوع float.
8 ٪ o البرنامج يتوقع رقم ثماني. يجب أن يكون المتغير من النوع int.
9 ٪ s البرنامج ينتظر إدخال سلسلة. السلسلة هي مجموعة من أي أحرف تصل إلى أول حرف فاصل يتم مواجهته. يجب أن يكون المتغير من نوع السلسلة.
10 ٪ x ،٪ X البرنامج ينتظر رقم سداسي عشري. يجب أن يكون المتغير من النوع int.
11 ٪ p متغير يتوقع مدخلات المؤشر. يجب أن يكون المتغير من نوع المؤشر
12 ٪ n يكتب إلى متغير قيمة عدد صحيح يساوي عدد الأحرف التي تمت قراءتها حتى الآن بواسطة وظيفة scanf.
13 ٪ u يقرأ البرنامج عددًا صحيحًا بدون إشارة. يجب أن يكون نوع المتغير عددًا صحيحًا بدون إشارة.
14 ٪ b البرنامج ينتظر رقمًا ثنائيًا. يجب أن يكون المتغير من النوع int.
15 ٪ مجموعة الأحرف الممسوحة ضوئيًا. البرنامج ينتظر إدخال الشخصيات.من المجموعة المحدودة المحددة بين قوسين مربعين. سيعمل scanf طالما هناك أحرف من المجموعة المحددة في دفق الإدخال.
16 ٪٪ تسجيل "٪".

أحرف في سلسلة التنسيق

كود C ++
كود C ++

رمز النجمة ()

علامة النجمة () هي علامة تشير إلى أنه يجب منع عملية الإسناد. يتم وضع علامة النجمة مباشرة بعد علامة "٪". على سبيل المثال ،


scanf ("٪ d٪c٪ d" ، & x ، & y) ؛ // تجاهل الحرف بين عددين صحيحين. scanf ("٪ s٪d٪ s" ، str ، str2) ؛ // تجاهل عدد صحيح بين سلسلتين.

بمعنى ، إذا قمت بإدخال السطر "45-20" في وحدة التحكم ، فسيقوم البرنامج بما يلي:

  1. المتغير "x" سيتم تعيين القيمة 45.
  2. المتغير "y" سيتم تعيين القيمة 20.
  3. وسيتم تجاهل علامة الطرح (الشرطة) "-" بفضل "٪c".

العرض (أو عرض الحقل)

هذا عدد صحيح بين علامة "٪" ومحدد التنسيق الذي يحدد الحد الأقصى لعدد الأحرف للقراءة في عملية القراءة الحالية.


scanf ("٪ 20s"، str) ؛ // اقرأ أول 20 حرفًا من تدفق الإدخال

هناك بعض الأشياء المهمة التي يجب مراعاتها:

  1. scanf سينتهي إذا واجه حرفًا فاصلًا ، حتى لو لم يحسب 20 حرفًا.
  2. إذا تم إدخال أكثر من 20 حرفًا ، فستتم كتابة أول 20 حرفًا فقط إلى str

معدِّلاتاكتب (أو الدقة)

كود البداية
كود البداية

هذه علامات خاصة تعمل على تعديل نوع البيانات المتوقعة للإدخال. العلم محدد على يسار محدد النوع:

  • L أو l (صغير L) عند استخدام "l" مع المحددات d ، i ، o ، u ، x ، يخبر العلم البرنامج أنه من المتوقع إدخال int long. عند استخدام "l" مع محدد e أو f ، تخبر العلامة البرنامج أنه يجب أن يتوقع قيمة مزدوجة. استخدام الحرف "L" يخبر البرنامج أنه من المتوقع حدوث مضاعفة طويلة. استخدام "l" مع المحددات "c" و "s" يخبر البرنامج أنه من المتوقع ظهور أحرف ثنائية البايت مثل wchar_t. على سبيل المثال ، "٪ lc" ، "٪ ls" ، "٪ l [asd]".
  • h علم يشير إلى النوع القصير.
  • hh - يشير إلى أن المتغير هو مؤشر إلى قيمة char موقعة أو قيمة char غير موقعة. يمكن استخدام العلم مع المحددات d ، i ، o ، u ، x ، n.
  • ll (حرفان صغيرتان L) - تشير إلى أن المتغير هو مؤشر لقيمة من النوع موقعة long long int أو long long int. يتم استخدام العلم مع المحددات: d ، i ، o ، u ، x ، n.
  • j - يشير إلى أن المتغير هو مؤشر إلى نوع intmax_t أو uintmax_t من ملف الرأس stdint.h. تستخدم مع المحددات: d ، i ، o ، u ، x ، n.
  • z - يشير إلى أن المتغير هو مؤشر لنوع size_t ، وتعريفه في stddef.h. تستخدم مع المحددات: d ، i ، o ، u ، x ، n.
  • t - يشير إلى أن المتغير هو مؤشر لنوع ptrdiff_t. تعريف علىهذا النوع موجود في stddef.h. تستخدم مع المحددات: d ، i ، o ، u ، x ، n.

بشكل أكثر وضوحًا ، يمكن تمثيل الصورة ذات المعدلات كجدول. سيكون هذا الوصف لـ scanf C للمبرمجين أكثر وضوحًا.

نوع المحددات والمعدلات
نوع المحددات والمعدلات

شخصيات أخرى

سيتم تجاهل أي أحرف مصادفة في التنسيق. في الوقت نفسه ، تجدر الإشارة إلى أن وجود مسافة بيضاء أو أحرف فاصلة (سطر جديد ، مسافة ، علامة تبويب) في سلسلة التحكم يمكن أن يؤدي إلى سلوك مختلف للوظيفة. في إصدار واحد ، ستقرأ scanf () بدون حفظ أي عدد من الفواصل حتى تواجه حرفًا آخر غير الفاصل ، وفي إصدار آخر ، لا تلعب المسافات (فقط هم) دورًا والتعبير "٪ d +٪ d" يعادل "٪ d +٪ d".

مثال على كود C ++
مثال على كود C ++

أمثلة

دعونا نلقي نظرة على بعض الأمثلة لمساعدتك على التفكير وفهم كيفية عمل الوظيفة بشكل أفضل.


scanf ("٪ 3s"، str) ؛ // إذا أدخلت السلسلة "1d2s3d1؛ 3" في وحدة التحكم ، فستتم كتابة "1d2" فقط إلى str scanf ("٪ dminus٪ d" ، & x ، & y) ؛ // سيتم تجاهل الأحرف الناقصة بين رقمين scanf ("٪ 5 [0-9]" ، str) ؛ // سيتم إدخال الأحرف في str حتى يصبح هناك 5 أحرف وتكون الأحرف أرقامًا من 0 إلى 9. scanf ("٪ lf"، & d)؛ // توقع فحص إدخال مزدوج ("٪ hd" ، & x) ؛ // العدد المتوقع لنوع المسح القصير ("٪ hu"، & y)؛ // توقع مسح ضوئي قصير للرقم بدون إشارة ("lx"، & z) ؛ // العدد المتوقع من النوع طويل int

منتوضح الأمثلة أدناه كيف يتغير الرقم المتوقع باستخدام رموز مختلفة.

scanf C - وصف للمبتدئين

سيكون هذا القسم مفيدًا للمبتدئين. غالبًا ما تحتاج إلى عدم توفر وصف كامل لـ scanf C بقدر ما تحتاج إلى تفاصيل حول كيفية عمل الوظيفة.

  • هذه الميزة عفا عليها الزمن إلى حد ما. هناك العديد من التطبيقات المختلفة في مكتبات الإصدارات المختلفة. على سبيل المثال ، وظيفة scanf S C المحسّنة ، والتي يمكن العثور على وصف لها على موقع Microsoft على الويب.
  • يجب أن يتطابق عدد المحددات في التنسيق مع عدد الوسائط التي تم تمريرها إلى الوظيفة.
  • يجب فصل عناصر دفق الإدخال فقط بأحرف فاصلة: مسافة ، علامة تبويب ، سطر جديد. فاصلة ، فاصلة منقوطة ، نقطة ، وما إلى ذلك - هذه الأحرف ليست فواصل لوظيفة scanf ().
  • إذا واجه scanf حرفًا فاصلًا ، فسيتم إيقاف الإدخال. إذا كان هناك أكثر من متغير واحد للقراءة ، فسينتقل scanf إلى قراءة المتغير التالي.
  • أدنى تناقض في تنسيق بيانات الإدخال يؤدي إلى نتائج غير متوقعة للبرنامج. حسنًا ، إذا انتهى البرنامج للتو بخطأ. لكن غالبًا ما يستمر البرنامج في العمل ويفعله بشكل خاطئ.
  • scanf ("٪ 20s…" ، …) ؛ إذا تجاوز تدفق الإدخال 20 حرفًا ، فسيقوم scanf بقراءة أول 20 حرفًا وإما إحباط أو الانتقال إلى قراءة المتغير التالي ، إذا تم تحديد واحد. في هذه الحالة ، ستستمر المكالمة التالية لـ scanf في قراءة دفق الإدخال من النقطة التي توقف فيها عمل المكالمة السابقة إلى scanf. إذا عند قراءة أول 20حرفًا ، تمت مصادفة حرف محدد ، وسيجهض scanf أو يواصل قراءة المتغير التالي ، حتى لو لم يقرأ 20 حرفًا للمتغير الأول. في هذه الحالة ، سيتم إرفاق جميع الأحرف غير المقروءة بالمتغير التالي.
  • إذا بدأت مجموعة الأحرف الممسوحة ضوئيًا بـ "^" ، فسيقوم scanf بقراءة البيانات حتى يواجه حرفًا محددًا أو حرفًا من المجموعة. على سبيل المثال ، "٪ [^ A-E1-5]" سيقرأ البيانات من الدفق حتى تتم مصادفة أحد الأحرف الإنجليزية الكبيرة من A إلى E أو أحد الأرقام من 1 إلى 5.
  • تقوم وظيفة scanf C ، كما هو موضح ، بإرجاع رقم يساوي العدد الناجح لعمليات الكتابة إلى المتغيرات. إذا كتب scanf 3 متغيرات ، فإن نتيجة نجاح الوظيفة ستعيد الرقم 3. إذا لم يتمكن scanf من كتابة أي متغيرات ، فستكون النتيجة 0. وأخيرًا ، إذا تعذر بدء scanf على الإطلاق لسبب ما ، ستكون النتيجة EOF.
  • إذا انتهت وظيفة scanf () بشكل غير صحيح. على سبيل المثال ، scanf ("٪ d"، & x) - كان من المتوقع وجود رقم ، ولكن تم استلام الأحرف كمدخلات. ستبدأ مكالمة scanf () التالية عند النقطة في تدفق الإدخال حيث انتهت مكالمة الوظيفة السابقة. للتغلب على هذه المشكلة ، من الضروري التخلص من شخصيات المشكلة. يمكن القيام بذلك ، على سبيل المثال ، من خلال استدعاء scanf ("٪s"). أي أن الوظيفة ستقرأ سلسلة من الأحرف وترميها بعيدًا. بهذه الطريقة الصعبة يمكنك الاستمرار في إدخال البيانات الضرورية.
  • في بعض تطبيقات scanf () ، "-" غير مسموح به في مجموعة الأحرف الممسوحة ضوئيًا.
  • يقرأ المحدد "٪ c" كل حرف من الدفق. أي أنه يقرأ أيضًا الحرف الفاصل. لتخطي حرف المحدد ومتابعة قراءة الحرف المطلوب ، يمكنك استخدام "٪ 1s".
  • عند استخدام محدد "c" ، يجوز استخدام العرض "٪ 10c" ، ولكن بعد ذلك يجب تمرير مجموعة من العناصر من نوع char كمتغير إلى وظيفة scanf.
  • "٪ [a-z]" تعني "كل الأحرف الصغيرة من الأبجدية الإنجليزية" ، و "٪ [z-a]" تعني 3 أحرف فقط: "z" ، "a" ، "-". بمعنى آخر ، يعني الحرف "-" نطاقًا فقط إذا كان بين حرفين بالترتيب الصحيح. إذا كانت "-" في نهاية التعبير ، في البداية ، أو بترتيب خاطئ للأحرف على جانبيها ، فهي مجرد حرف واصلة ، وليست نطاقًا.
كود C ++
كود C ++

الخلاصة

هذا يختتم وصف scanf C. هذه ميزة سهلة الاستخدام للعمل في البرامج الصغيرة وعند استخدام طريقة البرمجة الإجرائية. ومع ذلك ، فإن العيب الرئيسي هو عدد الأخطاء غير المتوقعة التي يمكن أن تحدث عند استخدام scanf. لذلك ، من الأفضل الاحتفاظ بوصف scanf C عند البرمجة أمام عينيك. في المشاريع المهنية الكبيرة ، يتم استخدام iostreams ، نظرًا لحقيقة أن لديهم قدرات عالية المستوى ، فهم أكثر قدرة على اكتشاف الأخطاء ومعالجتها ، وكذلك التعامل مع كميات كبيرة من المعلومات. وتجدر الإشارة أيضًا إلى أن وصف scanf C باللغة الروسية متاح في العديد من مصادر الشبكة ، بالإضافة إلى أمثلة عليهالاستخدام ، بسبب عمر الوظيفة. لذلك ، إذا لزم الأمر ، يمكنك دائمًا العثور على الإجابة في المنتديات المواضيعية.

موصى به: