توفر لغة البرمجة C العديد من وظائف المكتبة المدمجة لإدخال المستخدم. في هذه المقالة سوف نتعرف على وظائف مكتبة sscanf scanf_s fscanf_s sscanf_s في لغة C.
1. وظيفة sscanf() في لغة C
يتم استخدام sscanf() لقراءة المدخلات المنسقة من السلسلة. تتشابه كل من الدالتين scanf() وsscanf() والفرق الوحيد بينهما هو أن الدالة scanf() تقرأ الإدخال من المستخدم من الإدخال القياسي مثل لوحة المفاتيح ووظيفة sscanf() تقرأ الإدخال من سلسلة وتخزن الإدخال في سلسلة أخرى.
بناء الجملة
int sscanf ( const char * str const char * format ...);
حدود
- عند النجاح، تقوم الدالة بإرجاع عدد القيم التي تم قراءتها بنجاح.
- في حالة فشل الإدخال قبل قراءة أي بيانات بنجاح، يتم إرجاع EOF.
- عند النجاح، تقوم الدالة بإرجاع عدد القيم المقروءة.
- في حالة فشل الإدخال قبل أن تتم قراءة أي بيانات بنجاح، يتم إرجاع EOF.
- إذا كان حجم المخزن المؤقت يساوي أو أصغر من حجم المصفوفة، فإن إدخال حجم أكبر من أو يساوي حجم المخزن المؤقت سيؤدي إلى فقدان البيانات حيث سيتم اقتطاع البيانات الزائدة وستتم قراءة البيانات حتى حجم المخزن المؤقت - 1.
- إذا كان حجم المخزن المؤقت أكبر من حجم المصفوفة
- إن إدخال حجم أصغر من حجم المخزن المؤقت سوف ينجح ولكنه سيعطي خطأ
- سيؤدي إدخال حجم أكبر من حجم المخزن المؤقت إلى تجاوز سعة المخزن المؤقت ويعطي نفس الخطأ.
- عند النجاح، تقوم الدالة بإرجاع عدد القيم التي تمت قراءتها بنجاح.
- في حالة فشل الإدخال قبل أن تتم قراءة أي بيانات بنجاح، يتم إرجاع EOF.
- عند النجاح، تقوم الدالة بإرجاع عدد القيم التي تمت قراءتها بنجاح.
- في حالة فشل الإدخال قبل أن تتم قراءة أي بيانات بنجاح، يتم إرجاع EOF.
قيمة الإرجاع
ملحوظة : يجب أن يكون عدد هذه الوسائط على الأقل مساويًا لعدد القيم المخزنة بواسطة محددات التنسيق.
مثال: برنامج C لتوضيح وظيفة sscanf
C// C program to illustrate sscanf statement #include int main() { // declaring array s char s[] = '3 red balls 2 blue balls'; char str[10] str2[10]; int i; // %*s is used to skip a word sscanf(s '%d %*s %*s %*s %s %s' &i str str2); printf('%d %s %s n' i str str2); return 0; }
الإخراج
3 blue balls
2. وظيفة scanf_s() في لغة C
هذه الوظيفة خاصة بمترجمي Microsoft. إنه نفس scanf إلا أنه لا يسبب التحميل الزائد للمخزن المؤقت. تعد وظيفة scanf_s() أكثر أمانًا من وظيفة scanf() لأنها توفر معلمة إضافية لتحديد حجم المخزن المؤقت الذي يمكنه تجنب تجاوز سعة المخزن المؤقت.
الأسد مقارنة بالنمر
بناء الجملة
int scanf_s (const char *format [argument]...);
حدود
ملحوظة : هنا يمكننا تحديد حجم المخزن المؤقت والتحكم فعليًا في حد الإدخال حتى لا يتعطل التطبيق بأكمله بسبب تجاوز سعة الذاكرة.
قيمة الإرجاع
لماذا تستخدم scanf_s()؟
يقوم scanf فقط بقراءة أي مدخلات يتم توفيرها من وحدة التحكم. لا يتحقق C مما إذا كان إدخال المستخدم سيتناسب مع المتغير الذي قمت بتعيينه. إذا كان لديك مصفوفة تسمى color[3] واستخدمت scanf للسلسلة Red، فستعمل بشكل جيد ولكن إذا أدخل المستخدم أكثر من 3 أحرف، فسيبدأ scanf في الكتابة في الذاكرة التي لا تنتمي إلى مصفوفة الألوان.
755 شمود
لن يلتقط C هذا أو يحذرك وقد يؤدي إلى تعطل البرنامج أو لا يتعطل اعتمادًا على ما إذا كان هناك شيء يحاول الوصول إلى فتحة الذاكرة هذه والكتابة عليها والتي لا تنتمي إلى مجموعة الألوان. هذا هو المكان الذي يلعب فيه scanf_s. يتحقق scanf_s من احتواء إدخال المستخدم في مساحة الذاكرة المحددة.
ملحوظة : scanf_s() سوف يعمل فقط في Microsoft Visual Studio.
مثال 1: برنامج C لتوضيح وظيفة sscanf_s
C// C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include #include int main() { char a[5]; // sizeof(a) is buffer size scanf_s('%s' a sizeof(a)); printf('n%s ' a); return 0; }
الإدخال 1
Red
الإخراج 1
Red
الإدخال 2
Yellow
الإخراج 2
No Output
المثال 2: برنامج C لتوضيح العلاقة بين حجم المخزن المؤقت وحجم المصفوفة.
C++// C++ program // consumes the Enter key // (newline character) pressed after input #include int main() { // example char ch[100000]; printf('Enter characters: '); scanf_s('%s' ch 99999); getchar(); return 0; }
C // C program // consumes the Enter key // (newline character) pressed after input #include int main() { char ch[100000]; printf('Enter characters: '); scanf_s('%s' ch 99999); getchar(); return 0; }
3. وظيفة fscanf_s() في لغة C
الفرق بين fscanf() وfscanf_s() هو نفس الفرق بين scanf() وscanf_s(). fscanf_s() هي وظيفة آمنة تتطلب حجم كل حقل من النوع c C s S و[ ] ليتم تمريره كوسيطة بعد المتغير مباشرة.
بناء الجملة
int fscanf_s( FILE *stream const char *format [argument ]... );
حدود
ملحوظة : يحتوي fscanf_s على معلمة إضافية لتحديد حجم المخزن المؤقت والتحكم فعليًا في حد الإدخال.
ما هو مدمج
قيمة الإرجاع
ملحوظة : fscanf_s سيعمل فقط في MS Visual studio.
مثال: برنامج C لتوضيح وظيفة fscanf_s
C// C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include #include int main() { char s1[10] s2[10] s3[10]; int year; // file pointer FILE* fp; // Open file securely fopen_s(&fp 'file.txt' 'w+'); fputs('Hello World its 2017' fp); rewind(fp); // Using fscanf_s fscanf_s(fp '%s' s1 sizeof(s1)); fscanf_s(fp '%s' s2 sizeof(s2)); fscanf_s(fp '%s' s3 sizeof(s3)); fscanf_s(fp '%d' &year sizeof(year)); printf('String1 |%s|n' s1); printf('String2 |%s|n' s2); printf('String3 |%s|n' s3); printf('Integer |%d|n' year); fclose(fp); return (0); }
الإخراج
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. وظيفة sscanf_s() في لغة C
sscanf_s() هي وظيفة آمنة لـ sscanf() وتتطلب الوظائف الآمنة حجم كل حقل من النوع c C s S و[ type ليتم تمريره كوسيطة بعد المتغير مباشرة.
كم صفر لمليون
بناء الجملة
int sscanf_s (const char * restrict buffer const char * restrict format ...);
حدود
ملحوظة : يحتوي sscanf_s على معلمة إضافية لتحديد حجم المخزن المؤقت والتحكم فعليًا في حد الإدخال.
قيمة الإرجاع
ملحوظة : sscanf_s() سوف يعمل فقط في Microsoft Visual Studio.
مثال: برنامج C لتوضيح وظيفة sscanf_s
C// C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include int main() { char s[] = '3 red balls 2 blue balls'; char str[10] str2[10]; int i; // %*s is used to skip a word sscanf_s(s '%d' &i sizeof(i)); sscanf_s(s '%*d %*s %*s %*s %s' str sizeof(str)); sscanf_s(s '%*d %*s %*s %*s %*s %s' str2 sizeof(str2)); printf('%d %s %s n' i str str2); return 0; }
الإخراج
3 blue balls
إنشاء اختبار