يبدو أن هناك خطأ في المثال كما ذكرت.
بالنسبة لسؤالك، تمرير قيمة الascii لمحرف دون كتابة الرقم يتم باستخدام علامات الاقتباس المفردة، أي تمرير '@'. أي أن هاتين الجملتين متطابقتين:
print("%c\n", 64);
print("%c\n", '@');
لكن لماذا تريد تمرير قيمة ascii واحدة لدالة parseInt؟ هذه الدالة تستلم سلسلة محارف وليس محرفا واحدا.
مثلا في هذا المثال احاول تحويل “123” الى 123 لكن في النتيجة تظهر 0 بغض النظر على الرقم المكتوب .
ايضا احتاج الى تمرير كل قيمة على حدة مثلا بدل تمرير “123” ارغب بإرسال كل على حدي
“1” وبعدها "2 " وغيرها
ويظهر خطأ
1: تعريفك لدالة parseInt خاطئ، نأسف إن كنت قد أخذت التعريف من إحدى الوثائق. التعريف يربط الدالة parseInt مع الدالة atof (أي أنك عندما تستدعي parseInt فأنت في الحقيقة تستدعي دالة atof من النظام، وهي في الحقيقة إحدى دالات لغة الC). المشكلة هنا أن دالة atof تحول سلسلة المحارف إلى عدد عائم (float) وليس عدد صحيح، لذا ستحتاج لاستخدام دالة atoi بدلا من ذلك. فيكون التعريف كالتالي:
@expname[atoi] func parseInt (CharsPtr): Int;
2: السطر الثاني parseInt(s(1)) خاطئ لأنك مررت محرفا واحدا بدل سلسلة المحارف. السطر الذي قبله صحيح لكنه أعطى نتيجة 0 بسبب الخطأ المذكور في الملاحظة الأولى.
3: دالة parseInt لم يتعرف عليها لأنها معرفة داخل الصنف String. أي أنك إن أزلت السطر الأول من المثال أعلاه فيمكنك استخدام التعريف الموجود داخل String كما يلي: