الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في المصفوفات!

مغلق
بدأه الكـتـكوت في 16 يناير 2005 · 10 رد · 683 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته...

أخواني لو سمحتم أنا عندي سؤالين في المصفوفات:

مثلاً أنا عرفت متغير من نوع char كالتالي:

char A[1]

فهل يعني أني لا أستطيع أن أخزن في المتغير إلا حرف واحد أم ماذا؟

السؤال الثاني:

إذا كان عندي مصفوفة من نوع char كالسابقة فكيف أستطيع الحصول على حرف معين فيها مثلاً الحرف الخامس أو السادس؟

#2

جواب السؤال الأول:

نعم ولكن في آخر خانة من مصفوفة char تحجز للقيمة \0 التي تنهي النص.

جواب السؤال الثاني:

تستطيع ذلك بعدة طرق اسهلها

char c [] = "mossa";
char a = c[2];

حيث أن طول النص 5

وطول المصفوفة 6

و c[2] تعيد قيمة الحرف وليس عنوانه

وإذا أردت العنوان

char * a = c+2;
#3

ممكن توضح أكثر أخوي لأني ما فهمت؟

#4

حين تقول

char A[1];

فإنك بالفعل تجعل المصفوفة لا تتسع الا لمحرف واحد كما ذكرت

اما لسؤالك الثاني :

سأعطيك هذا المثال

لو افترضنا اني اعلنت عن مصفوفة من نوع char

وأردت ان يدخل المستخدم لكل عنصر في المصفوفة قيمة معينة

char A[5];
for(int i=0; i<5; i++)
scanf("%s",&A);

في الحلقة التالية تطبع القيم وترى فهرس كل عنصر من عناصر المصفوفة

for(i=0; i<5; i++)
printf("A[%d]=%c"i,A);

اتمنى اكون قد وضحت ماكان غامضا عليك

#5

ألف شكر أخوي فهد علي ..

لكن لازال عندي سؤال وهو:

لماذا إذا كتبت :

char A[1]="ll"

يعطيني رسالة خطأ.

ولكن إذا كتبت:

char A[1];
A[5]="LLLL"

لا يعطيني رسالة خطأ.

#6

اخي بارك الله فيك

رسالة الخطأ التي تخرج لك هي الرسالة التالية :

error C2117: 'll' : array bounds overflow

فهذا كما ذكرت لك العدد الموجود بين القوسين [] يكون هو حجم السلسلة النصية

فأنت حين تقول

char A[1]="ll";

بهذا تكون قد وضعت محرفين وليس محرف واحد ..

لكن انا عندي سؤال حقيقة ظهر لي وانا احاول الاجابة على سؤالك

حين استخدم الحلقة التالية :

char A[5];
for(int i=0; i<5; i++)
scanf("%s",&A);

لو استبدلت s%  بــــ c%

يكون الادخال لــ

A[0]
A[2]
A[4]

ولا اعرف لماذا يقفز 
A[1]
A[3]

تم تعديل هذه المشاركة بواسطة فهد علي في 17 يناير 2005 في 11:05

#7

ألف شكر أخوي لكن ممكن تشرح لي وش فائدة scanf?

#8

scanf يتم استخدامها في لغة c للقراءة كما يتم استخدام cin في لغة c++

#9

ألف شكر أخوي فهد علي.

#10
فهد علي كتب:
لكن انا عندي سؤال حقيقة ظهر لي وانا احاول الاجابة على سؤالك

حين استخدم الحلقة التالية :

char A[5];
for(int i=0; i<5; i++)
scanf("%s",&A);

لو استبدلت s% بــــ c%

يكون الادخال لــ

A[0]
A[2]
A[4]

ولا اعرف لماذا يقفز 
A[1]
A[3]

هذا لأنك عندما تستخدم %s فهذا يخبر scanf انك تريد عبارة نصية.. بمعني آخر.. سلسلة حروف تنتهي ب \0 ;)

لذلك فعندما تدخل حرف واحد. G مثلا فإن scanf تخزنها كـ G\0 وبالتالي تحجز مكانين

اما في حالة استخدام %c فهي تأخذ الحرف فقط ولا تقوم بإضافة \0 وبالتالي تحجز مكان واحد فقط.

#11

يعيطك العافية اخي Chaos

لا عدمنا حضورك

هذا الموضوع مغلق.

مواضيع مشابهة