كيف يمكن كتابة برنامج يقوم بأخد الأعدادات على شكل (p , -o, -t-)
ففي حال -t يأخد قيم عدية مباشرة مثل
example.exe -t 555
أرجو المساعد لأني بصراحة غير مطلع بشكل كبير على ال ++C
كيف يمكن كتابة برنامج يقوم بأخد الأعدادات على شكل (p , -o, -t-)
ففي حال -t يأخد قيم عدية مباشرة مثل
example.exe -t 555
أرجو المساعد لأني بصراحة غير مطلع بشكل كبير على ال ++C
markone كتب:كيف يمكن كتابة برنامج يقوم بأخد الأعدادات على شكل (p , -o, -t-)
ففي حال -t يأخد قيم عدية مباشرة مثل
example.exe -t 555
أرجو المساعد لأني بصراحة غير مطلع بشكل كبير على ال ++C
يعني عن طريق الأوامر من الـ Console أثناء تنفيذ البرنامج؟
تم تعديل هذه المشاركة بواسطة ♥ حُوريّة ♥ في 12 يونيو 2011 في 17:43
[وسط]
♥ Countess ♥

♥
[/وسط]
تماما Console هل من مثال
نعم هذا مثال بسيط لإدخال مجموعات arguments اثناء تنفيذ البرنامج
#include <iostream>
int main(int argc, char *argv[])
{
using namespace std;
cout << "There are " << argc << " arguments:" << endl;
// Loop through each argument and print its number and value
for (int nArg=0; nArg < argc; nArg++)
cout << nArg << " " << argv[nArg] << endl;
return 0;
}لمزيد من المعلومات بنحاول البحت والقراءة حول
Using command-line arguments in ++C
اطيب المُنى
[وسط]
♥ Countess ♥

♥
[/وسط]
كل الشكر لكن حدث معي خطا عند اضافة
argv[nArg]
الى Function
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE,argv[nArg]); 'OpenProcess' : cannot convert parameter 3 from 'char *' to 'DWORD'
markone كتب:كل الشكر لكن حدث معي خطا عند اضافة
argv[nArg]الى Function
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE,argv[nArg]); 'OpenProcess' : cannot convert parameter 3 from 'char *' to 'DWORD'
اخي الكريم انت تستعمل هذا ال function بطريقه خاطئه!!!
اخر جزء منها ياخذ ال ID لل Process الذي تريد الحصول على handle جديد له
راجع هنا:
http://msdn.microsoft.com/en-us/library/ms684320(v=vs.85).aspx
تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 14 يونيو 2011 في 10:38
لا أنا متاكد من طريقة عمل ال function
كل ماعليك فعله هو ادخال ال PID الى parameter 3
لذا المطلوب هو تحويل
argv[nArg]
من النوع
'char *' to 'DWORD'
markone كتب:لا أنا متاكد من طريقة عمل ال function
كل ماعليك فعله هو ادخال ال PID الى parameter 3
لذا المطلوب هو تحويل
argv[nArg]
من النوع
'char *' to 'DWORD'
ههههه ، يبدو ان معلوماتك تتفوق على شركه مايكرو سوفت .
راجع الرابط لتستفيد !!!
أوكي مافي مشكلة
كيف يمكن أخذ هذه المتغيرات و أضافتها الى أي function من دون ظهور
cannot convert from 'char *' to 'DWORD'
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)atoi(argv[nArg]) );
تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 14 يونيو 2011 في 13:16
مدونتي: C++ Tips and Tricks
وشيء اخر اخي الكريم وهو ان حجم argv هو nArg ، اي ان اخر عنصر من argv هو nArg -1 ، انت هنا تدخا على مساحه غير معروفه بالنسبه لك في الذاكره وتقراء منها وهذا خطاء ثاني بالاضافه لاستخدامك الخاطيء للداله الاولى
شكراا على المساعد أعود و أقول
أنا الست خبيرا في ++C
لذا لست أعلم المساحه الواجب جزها في الذاكر
بصراحة أحاول تعلم ال ++C عن طرق الأمثلة لذا من الأخطاء التي أواجها أتعلم بتفاصيل أكثر
لأني لا أعرف من أين أبدا معظم الكتب العربية ليست معبرة و الأنجليزية بحاجة لوقت طويل لقرائتها
البرمجة صلب أساسي في مختلف أنواع العلوم (كيمياء.فيزياء)
لذا أن كنت أريد الحصول على الماستر لهذه المواد (كيمياء.فيزياء) يجب أن أكون على دراية كافية بهذه اللغة
markone كتب:شكراا على المساعد أعود و أقول
أنا الست خبيرا في ++C
لذا لست أعلم المساحه الواجب جزها في الذاكر
بصراحة أحاول تعلم ال ++C عن طرق الأمثلة لذا من الأخطاء التي أواجها أتعلم بتفاصيل أكثر
لأني لا أعرف من أين أبدا معظم الكتب العربية ليست معبرة و الأنجليزية بحاجة لوقت طويل لقرائتها
البرمجة صلب أساسي في مختلف أنواع العلوم (كيمياء.فيزياء)
لذا أن كنت أريد الحصول على الماستر لهذه المواد (كيمياء.فيزياء) يجب أن أكون على دراية كافية بهذه اللغة
اخي الكريم اذا اردت فقط تعلم الاساسيات فانصحك ان تبتعد في البدايه عن الغوص فال windows api لانها عالم لانهايه له وكبيره جداً جداً.
اذا كانت مشكلتك فقط بتشغيل البرنامج واضافه command line args يمكننا ان نعطيك طرق اسهل بكثير عما تقوم به بدلاً من استخدام functions من ال API.
مثلاً استخدام ال function التالي system كافي بالنسبه لك ويسهل عليك الامور كثيراً
عزيزي هناك طريقتان لفعل أي شيء إما أن تستخدم عجلة جاهزة أو أن تعيد اختراع العجلة :)
أنا أختار استخدام Boost.Program_options و هي مكتبة رائعة بحق, و تمكنك من التعامل مع الـ Command Line و الـ Config Files و Environment Variables بكل سهولة, فقط اشرح لها ما تريد!!!
بالمناسبة بحثت في Boost عن مكتبة تفعل ما تريده بعد قراءة سؤالك و لم يسبق لي التجربة من قبل و خرجت بالمثال التالي الذي قمت بكتابته في 10 دقائق لذلك سنركز على الـ Command Line فقط.
أولاً خذ المثال التالي و جربه:
#include <iostream>
#include <string>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main(int argc, char* argv[])
{
po::options_description scheme("command line options");
scheme.add_options()
("help", "print the command line options help page")
("first_name", po::value<std::string>(), "set first name")
("last_name", po::value<std::string>(), "set last name")
("age", po::value<int>(), "set age");
po::variables_map options;
po::store(po::parse_command_line(argc, argv, scheme), options);
po::notify(options);
if(options.count("help"))
{
std::cout << scheme;
return 0;
}
std::cout << "first_name: ";
if(options.count("first_name"))
std::cout << options["first_name"].as<std::string>();
else
std::cout << "[first name wasn't specified]";
std::cout << std::endl;
std::cout << "last_name: ";
if(options.count("last_name"))
std::cout << options["last_name"].as<std::string>();
else
std::cout << "[last name wasn't specified]";
std::cout << std::endl;
std::cout << "age: ";
if(options.count("age"))
std::cout << options["age"].as<int>();
else
std::cout << "[age wasn't specified]";
}هذه تجاربي مع الكود:
يمكننا أن نتشارك في فهم الكود إن كانت Boost توافق رغباتك, رغم أن قراءة سريعة للوثائق كافية لتعلم أساسيات المكتبة.
تحياتي...
تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 18 يونيو 2011 في 06:02
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…