السلام عليكم ورحمة الله وبركاته
العنوان يدل على التالي
استخدام تعليمة
Switch مع نوع البيانات
String يمكن ذلك في بعض اللغات لكنه ليس ممكناً في الـ
++C فمثلاً لو اردنا برمجة برنامج يقوم بجلب
Arguments من المستخدم ويعرض مكافئاتها
باستخدام تعليمة
switch , ببساطة لايمكن ذلك
مثال
- الكود:
-
[LEFT][COLOR="Yellow"]#include
#include
using namespace std;
int main(int argc,char* argv[]){
string x = argv[1];
switch(x)
{
case "help":
cout << "help";
break;
}
return 0;
}[/COLOR][/LEFT]
نعمل كومبايل له و النتيجة :
- الكود:
-
[LEFT][COLOR="Yellow"]C:\example.cpp: In function `int main(int, char**)':
C:\example.cpp:8: error: switch quantity not an integer
C:\example.cpp:15:3: warning: no newline at end of file
'"example.exe"' is not recognized as an internal or external command,
operable program or batch file.
[/COLOR][/LEFT]
لحل هذه المشكلة سوف نقوم باستخدام الـ
Standard Template Library =
STL وتحديداً الملف الرأسي
map + تعليمة الـ
enum نقوم بإدراج المكتبة
- الكود:
-
[LEFT][COLOR="Yellow"]#include [/COLOR][/LEFT]
نقوم بإعداد الـ
enum لتحديد قيمة كل
argument يتم استقباله من المستخدم
- الكود:
-
[LEFT][COLOR="Yellow"]enum cases {help , permission};[/COLOR][/LEFT]
الآن نقوم بإنشاء
Container من الملف الرأسي
map يقوم بعمل مقارنة بين نوع البيانات
string و الـ
enums المعرفة مسبقاً
ولنسميها مثلا
Converter - الكود:
-
[LEFT][COLOR="Yellow"]map Converter;[/COLOR][/LEFT]
الآن سوف نقوم بإنشاء دالة تقوم بعمل
initialization لل
enum المعرفة مسبقاً من خلال الـ
Converter ولنسميها مثلاً
Arguments - الكود:
-
[LEFT][COLOR="Yellow"]
[COLOR="Red"]inline [/COLOR]void Arguments() {
Converter["-h"] = help;
Converter["-whoami"] = permission;
}[/COLOR][/LEFT]
inline هنا وضعت لتضمين الدالة كـ كود ضمن دالة الـ
main الرئيسية وليست كـ
function خارجية
الآن , بقي أن نقوم بإعداد كود الـ
main الرئيسي للعمل ..
- الكود:
-
[LEFT][COLOR="Yellow"]int main(int argc,char* argv[]){
Arguments();
string x = argv[1];
switch(Converter[x])
{
case help:
cout << "help";
break;
case permission:
system("whoami");
break;
}
return 0;
}[/COLOR][/LEFT]
الآن , نستعرض كامل الكود
- الكود:
-
[LEFT][COLOR="Yellow"][COLOR="White"]#include
#include
#include
using namespace std;
[/COLOR]
enum cases {help , permission};
map Converter ;
inline void Arguments() {
Converter["-h"] = help;
Converter["-whoami"] = permission;
}
[COLOR="DeepSkyBlue"]
int main(int argc,char* argv[]){
Arguments(); // إعداد القيم الإبتدائية التي يتم عليها قياس المدخلات
string x = argv[1];
switch(Converter[x])
{
case help:
cout << "help";
break;
case permission:
system("whoami");
break;
}
return 0;
}[/COLOR][/COLOR][/LEFT]
نعمل كومبايل له
سيحدث خطأ
- كونه لا يوجد سوى متغير واحد مستقبل ونحن قد طلبنا المتغير 2 لوضع قيمته في السلسلة النصية - عند تشغيل البرنامج للمرة الأولى
لكننا سنعيد تشغيله مع ارسال متغيرات له ونرى المخرجات
- الكود:
-
[LEFT][COLOR="Yellow"]C:\>example.exe -h
help
C:\>example.exe -whoami
moaz\M0AZ[/COLOR][/LEFT]
الشرح سريع بدون تدقيق , أتمنى وفقت فيه