السلام عليكم
int main()
{
char*p;
p=(char*)malloc(sizeof(char));
p="23"
printf("%c",p[0]+p[1]);
}كيف أجعل النتيجة المطبوعة 5 وليست 101
السلام عليكم
int main()
{
char*p;
p=(char*)malloc(sizeof(char));
p="23"
printf("%c",p[0]+p[1]);
}كيف أجعل النتيجة المطبوعة 5 وليست 101
printf("%d",(p[0]-48)+(p[1]-48));تم تعديل هذه المشاركة بواسطة khatibe_30 في 5 سبتمبر 2012 في 23:47
[سبحان الله و بحمده, سبحان الله العظيم]
الأخ الكريم/الأخت الكريمة
السلام عليكم ورحمة الله وبركاته
مرحباً بكم في منتدى الفريق العربي للبرمجة
نود تنبيهك أن العنوان غير مناسب.
الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.
وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!
قواعد المشاركة
شاكرين لكم حُسن تعاونكم
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
nkernel كتب:السلام عليكم
int main() { char*p; p=(char*)malloc(sizeof(char)); p="23"
أخطأت في الحجز
حجزت ل octet واحد في هذه الحالة سيكون ل '0/' بينما المفروض أن تحجز لثلاتة
p=(char*)malloc(2*sizeof(char)+1);
الخطأ الثاني في الدالة main
لم ترجع لها أي قيمة
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* ......*/
return 0;
}بالنسبة لسؤالك
الطرية الأولى
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t=0;
char *p;
p=(char*)malloc(2*sizeof(char)+1);
p="23";
t=((*p)-48)+(*(p+1)-48);
printf("%d",t);
free(p);
return 0;
}الطرية الثانية بتحويل النص لمتغير من نوع long مثلا
#include <stdio.h>
#include <stdlib.h>
int main()
{
long t=0;
char *p=NULL,*q=NULL;
p=(char*)malloc(1*sizeof(char)+1);
q=(char*)malloc(1*sizeof(char)+1);
p="2";
q="3";
t=strtol(p,NULL,10)+ strtol(q,NULL,10) ;
printf("%ld",t);
free(p);
free(q);
return 0;
}ولا تنسى أن تحرر الحجز عند الإنتهاء منه free()
وبالتوفيق
تم تعديل هذه المشاركة بواسطة مومو (momo) في 6 سبتمبر 2012 في 00:35
i love you mama
أخي الكريم ...عندما تحجز مصفوفة محرفية (لتخزين الحروف ) .. فإنها ستقوم بتخزين الأرقام داخل علامات التنصيص على أنها حروف أيضاً ...
وهذا يعني أن الرقم واحد لن يخزن على أنه 1 ...
بل سيخزن كما يحدد جدول ASCII حيث يتم ترميز كل حرف برقم وفي جدول ASCII يرمز للحرف 1 بالرقم 49
وأؤكد على كلمة الحرف 1 لأنه ليس رقماً في هذه الحالة ...
هناك طريقة بسيطة تمكنك من تجنب التعامل مع جدول ASCII وهي القيام بالعملية الصحيحة تماماً التالية :
'1'-'0'
أي أنك ستطرح قيمة ASCII للحرف 1 من قيمة ASCII للحرف 0 وهذا سيعطيك الرقم 1 ...
وبذلك يمكن أن نكتب الكود كما يلي :
int main()
{
char p[]="23";
printf("%c",(p[0]-'0')+(p[1]-'0')+'0');
return 0;
}لاحظ أننا قمنا بطرح الحرف 0 من كل من الحرفين على حدة لتحويل الحرفين إلى الرقمين المقابلين لهما ... ثم جمعنا للناتج الحرف '0' وذلك لتحويل الرقم إلى الحرف المقابل ....
ولكن هذه الطريقة التي استعملتها غير صحيحة دائماً ....فماذا لو أردت جمع الحرفين 5 و 6 ...
وكملاحظة أخيرة ... أنت سألت كيف أجعل الكود يطبع 5 وليس 101 في حين أن كودك يطبع حرف e وليس 101 لأنك استخدمت ...c% داخل printf
أؤكد على أن حل الأخ ياسين صحيحي تماما ....
والأخ مومو محق في ملاحظاته ... إلا أنني أظن أنك تستخدم VisualStudio6 لأن المترجم به لا يظهر خطأ عند عدم كتابة return 0 بل يظهر warning فقط ...
كما أن عدم حجز حجرة إضافية للمحرف الصفري ... لا تؤدي إلى حدوث runtime error ... فذلك غالباً ما يتم تجاوزه ... ولا أدري لماذا ...
بالتوفيق للجميع ...
تحياتي
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…