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

هل أحد يفسر لي هذه المشكلة

بدأه mandareka في 29 يناير 2009 · 3 رد · 549 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

  1.  
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. int d;
  7. char c;
  8.  
  9. scanf("%d",&d);
  10. scanf("%c",&c);
  11.  
  12. return (0);
  13. }
  14.  
  15.  
  16.  

غريب جداً هذا الكود!!

يقوم بتنفيذ الـ fscan الأولى بشكل الصحيح أما الثانية فلا يطلب الإدخال من المستخدم

ما هو السبب يا ترى

مع اني استخدمت أكثر من كومبايلر

turbo c++ 3

visual c++ 2008 professional

أطيب الأمنيات

أخوكم محمد من فلسطين

تم تعديل هذه المشاركة بواسطة mandareka في 29 يناير 2009 في 02:37

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#2

scanf(" %c",&c); يجب ان تكتب الكود هكدا يوجد سبيس مابين علامة " و %

:blush: ستسالني لمادا يجب ان نترك مساحة مابين " و% ساقول لك نسيت

ان شاء الله الاثنين ساسئل الاستاذ عن السبب وسارد عليك

:lol:

#3

مشكور جدا اخي الكريم

لم أكن اتوقع ان هذه المشكلة بهذه البساطة

ولكن لدي سؤال

هل نترك الفراغ فقط في مع حرف c??????????????

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#4

على سبيل المثال لنقل انك تريد ادخال الرقم 55 و الحرف c

اولا ستقوم بادخال الرقم الاول الدي هو 55 تم ستقوم بضغط على الزر انتر ستقوم بادخال الحرف سي تم تضغط على انتر

الان لنرى عدد الكاركتر التي قمت بادخالها

'5' '5' <enter> 'c' <enter>

قمت بادخال خمس كاراكترز

1-compilation

ستدخل

'5' '5' <enter>

اولا scanf"%d

ستقوم بقرائة الكاراكترز '5'5' ذ

ومن ثم تحويلها الى قيمة عددية 55 لكن سكانف لن تقوم بقرائة السطر الجديد <enter>

لكن الدالة التي ستقوم بقراءة السطر هي scanf"%c (white space)

وبالتالي الدالة قرات الكاراكتر ولن تطلب منك ادخال اي كاراكتر

ولحل هدا المشكل يجب ان نمنع الدالة من قرائة وايت سبيس ودلك باظافة سبيس قبل %c

ويالتالي الدالة ستجتاز الوايت سبيس ولن تقوم بقرائته وستطلب من ادخال الكاراكتر الدي تريد

وانا قمت بترجمة هدا الموضوع

If you enter say '44' and 'x' as input to your original program you have in fact entered 5 characters into the input stream: '4','4',<enter>,'x', and <enter>.

scanf("%d", &d) reads the first two characters and converts them into the integer value 44 but leaves the newline character (<enter>) in the input stream. The next scanf("%c", &ch) reads the next character (the newline) from the input and prints it out. This is because "%c" does not skip whitespace as "%d" does.

Drl's version works because 'fgets' reads a complete line, including the newline character, from the input.

You could also get by with only doing a slight modification to your original program by explicitly telling scanf to skip any whitespace before the character that you want to read

اسف ادا كانت هناك اخطاء في الترجمة :blush:

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