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

في هذا الكود خطأ ... أرجو حل هذه المشكلة

بدأه maajed555 في 8 يناير 2009 · 24 رد · 1,484 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا الكود في لغة السي بلس بلس فيه خطأ ... أرجو مساعدتي في حل المشكلة

 #include 

#include 

using namespace std;



int main()

{

int sure=0;

char x[]="book";

char pass[4];

for(;;){

for(int i=0;i<4;i++){

pass=getch();

putchar('*');

}

for (i=0;i<4;i++){

if (pass==x) sure++;

else break;

}

if (sure == 4){

cout << "\n Password Correct"<< endl;

break;

}

cout << endl;

cout << "False....Try Againe" << endl;

}

return 0;

}
#2

أخي ، أولاً هذا منتدى فيجوال بيسك.

ثانياً: هل الخطأ خطأ في التنفيذ يعني المفروض يحصل شيء، لكن شيئاً آخر يحصل، أم خطأ Error ، يعني لا يعمل البرنامج أصلاً؟

هذه الجملة خاطئة  :wacko: 


#3

أنا اعتذر عن نشر هذا الموضوع في هذا المنتدى ... وأرجو من المشرف أن ينقل الموضوع إلى منتدى السي بلس بلس

اما بالنسبة للخطأ فهو عند تنفيذ البرنامج ، فإن البرنامج يشير إلى خطأ في أحد السطور وهو

for (i=0;i<4;i++){

أرجو المساعدة ولكم جزيل الشكر والتقدير

#4

السلام عليكم

أخي أنا نسخت الكود كما هو ولصقته عندي، وعمل دون مشاكل، باستثناء أن namespace تكتب كلها بالأحرف الصغيرة، وأنك لم تضف المكتبات iostream و conio.h .

ولكن ليس هناك خطأ في جملة for

هذه الجملة خاطئة  :wacko: 


#5

أخي الكريم

انا وجدت حل المشلكة وذلك باختيار اسم آخر للمتغير الخاص بجملة for

فبدلا من الحرف i اخترت الحرف j

وبذلك زالت المشكلة عندي ... شكرا لك ، وتقبل تحياتي :)

#6

أخي الكريم ،،

الخطأ ليس في اسم المتغير ، لاحظ معي الكود الأصلي للدالة for :

for (i=0;i<4;i++){

if (pass==x) sure++;

else break;

}

الخطأ هو أنك لم تعرف المتغير i ، وحل المشكلة جدًا بسيط فقط أضف int قبل اسم المتغير لتعريفها ...

for (int i=0;i<4;i++){

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 9 يناير 2009 في 08:24

سبحان الله وبحمده ... سبحان الله العظيم

#7

لا أظن هذا أخي أحمد، لأنه قد عرفه في الجملة التي قبلها، وهذا يكفي والله أعلم

علماً أن الكود عمل معي دون مشاكل.

هذه الجملة خاطئة  :wacko: 


#8

إذا كنت تقصد أنه عرف المتغير i في جملة for السابقة فهذا غير كافي لأن المتغير تم تعريفه داخل حلقة التكرار فقط ، أما خارجها فلا يمكن الوصول إليه...

ملاحظة : جملتي #include ليس لهما فائدة ...

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 9 يناير 2009 في 15:20

سبحان الله وبحمده ... سبحان الله العظيم

#9

اتشرف بحضورك أخي احمد ... واشكرك على الملاحظة

ولكن كما قال أخي abboodd

فقد تم تعريف المتغير ( i ) في جملة سابقة ... ولا أدري إذا كان اختلاف المترجمات له اثر في ذلك ... ولكني حاولت أن أشغل الكود أكثر من مرة ولكنه لم يعمل الا عندما غيرت المتغير إلى آخر

شكرا لكم على التفاعل :)

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

بعد ان كتبت هذا الرد ،،، قرأت رد الاخ احمد ، وفهمت السبب في ذلك ، وسأجرب ملاحظته الأخيرة وهي تعريف المتغير مرة أخرى في حلقة التكرار الأخرى :)

تم تعديل هذه المشاركة بواسطة maajed555 في 9 يناير 2009 في 15:20

#10

أعدت تعريف المتغير في الحلقة التكرارية الثانية

وكانت النتيجة أن البرنامج اشتغل من غير أية مشاكل ...

شكرا لك أستاذي أحمد ...

#11

لا شكر على واجب أخي maajed555

وبلاش كلمة "أستاذي" ، كلنا هنا لطلب العلم..

"ينقل الموضوع إلى قسم C++\C"

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 9 يناير 2009 في 15:49

سبحان الله وبحمده ... سبحان الله العظيم

#12

شكرا لك اخي احمد .... ولدي سؤال يتعلق بكود آخر

انا الآن أدرس لغة السي بلس بلس من كتاب (الاكسير) للأستاذ سلطان الثبيتي ، وقد واجهتني بعض الاخطاء البسيطة في الاكواد ، ومنها ما تفضلت أنت بحله في اول هذه الرسالة ..... والآن لدي كود آخر موجود في نفس الكتاب وفيه مشكلة ، أرجو أن تتفضل بحلها ، وإليك الكود :-

#include <iostream.h>
void main ( )
{
int p,g;
int *x;
p=5;g=7;
cout << p << "\t" << g << "\n " << &p << "\t" << &g
<< endl;
x=&p;
cout << *x << "\t" << x << endl;
x=&g;
cout << "\n\n" << *x << "\t" << x;
}

في هذا الكود في السطر الخاص بالدالة (main) يظهر خطأ بسبب كلمة (void) ، وعندما اقوم بتغييرها إلى كلمة (int) يعمل الكود ، فهل الخطأ من المؤلف الذي وضع الكود أم أن هناك حل آخر لهذه المشكلة؟؟

#13

أخي الكود السابق نسخته ولصقته عندي ولم يكن هناك مشاكل.

وهذا الكود أيضاً، نسخته ولصقته دون مشاكل. ما المترجم الذي تستعمله.

وما هو نص الخطأ؟

هذه الجملة خاطئة  :wacko: 


#14

المترجم اللي عندي الله يسلمك هو Cood::Blocks

ما ادري هل لاختلاف المترجم أثر في مثل هذه الاخطاء....؟؟

#15

لا أدري بصراحة

اقتباس
وما هو نص الخطأ؟

هذه الجملة خاطئة  :wacko: 


#16

نص الخطأ الآتي

error: 'main' must return 'int

#17

بعد البحث، هذه أهم جملة وجدتها

اقتباس
Some compilers accept void main(), but that is non-standard and shouldn't be used. Instead use int main().

ووجدت صفحات تتحدث عن استعمال void و main إليك إياها:

http://www.daniweb.com/forums/thread78955.html

http://www.physicsforums.com/showthread.php?t=174506

علماً أني لم أقرأ الصفحة الثانية كاملة.

وبهذا فيبدو أن بعض المترجمات تقبل ذلك وبعضها الآخر لا يقبل

هذه الجملة خاطئة  :wacko: 


#18

أحسنت أخي الكريم ، وبذلت جهدا مشكورا ... أنا ممتن لك وفقك الله

لكي أتأكد من أن المشكلة بسبب المترجمات ، فأرجو أن تخبرني ما نوع المترجم الذي تستخدمه بحيث لم يظهر لديك فيه الخطأ الذي ظهر عندي؟؟

وثانيا ... بعض المترجمات المجانية تنقصها بعض الملفات مما يسبب اختلافا بينها وبين المترجمات المكتملة ، وبحسب ما قرأت أن أفضل مترجم هو التابع لشركة مايكروسوفت فيجوال سي بلس بلس ، فهل لديك فكرة عن هذا الموضوع واختلاف النسخ للمترجم الواحد؟؟؟ وكيف أستطيع الحصول على نسخة كاملة من أحد المترجمات المميزة للغة السي بلس بلس؟؟ وكيف أعرف أن هذه النسخة كاملة وليست ناقصة مثلا؟؟

#19

لن أستطيع سوى أن أجاوبك على السؤال الأول، فأنا استعمل Microsoft Visual c++ ، والسبب الأساسي لاستعماله هو أنه يأتي مع Visual Basic 6 في حزمة Visual Studio 6 وليس سبباً تقنياً :)

وحسب معلوماتي فإن الأفضلية بين المترجمات تعتمد على الذي تريد القيام به، وعلى أي نظام تشغيل، كما أن شخصاً أخبرني مرة أن Borland c++ أفضل من Visual .

والله أعلم

بانتظار رأي المختصين.

واعذروني على تطفلي على قسمكم

هذه الجملة خاطئة  :wacko: 


#20

Cood::Blocks ليس مترجم وانما محرر نصوص أو بيئه تطوير صغيره IDE ، ويستخدم المترجم g++ الموجود بالحزمه MinGW ،، والمترجم g++ من أفضل المترجمات والسبب أنه يطبق سي++ القياسيه تماما .. وفي سي++ القياسيه الداله main يجب أن تكون نوع القيمه الراجعه منها هي int . لذلك يخرج لك رساله خطأ . فحول void الى int . وعند الأنتهاء من الداله في الأخير يمكن عمل return 0 .. ويمكن تجاهلها أيضا ، ففي سي++ القياسيه يمكنك أن لا ترجع قيمه من الداله وحتى لو كانت الداله تعود بint .

بالتوفيق :) .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#21

جزاك الله خيراً أخي، سؤال، الكود الأول في الموضوع اشتغل عندي على الـVisual ولم يعمل عند الأخ.

هل هذا أيضاً بسبب c++ القياسية؟

شكراً لك

تم تعديل هذه المشاركة بواسطة Abboodd في 10 يناير 2009 في 17:08

هذه الجملة خاطئة  :wacko: 


#22

احسنتما بارك الله فيكما ... انا متابع ... وسيأتي دوري لطرح سؤالي :)

#23

مشكلة أخرى في كود آخر تواجهني ..... أرجو المساعدة

يبدو أن اختلاف المترجمات أو عدم تحرير الاكواد يكدر صفو الاستفادة من هذا الكتاب الجميل (الإكسير) ، لا أدري ما السبب !!

سأضع لكم الكود ، مع ملاحظة أنني سأغير في الكود من (void main) إلى (int main)

المشكلة بالتحديد في التعامل مع المؤشر divides في السطر رقم 18 .... هذا مبدئيا ، ولا أدري هل هناك أخطاء أخرى بعد تعديل هذا الخطأ أم لا؟؟

  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. float *divides;
  6. int times;
  7. //////////////////////////////
  8. void HowTimes(int x);
  9. void pointer();
  10. void TheMain(int x);
  11. ////////////////////////////
  12. int main()
  13. {
  14. int a;
  15. cin>> a;
  16. TheMain(a);
  17. for(int i=0;i<times;i++)
  18. cout <<divides[i]<< endl;
  19. cout << "The Many Of How Number Divides Is:t"
  20. <<times
  21. <<endl;
  22. }
  23. ///////////////////////
  24. void pointer( )
  25. {
  26. divides=new float[times];
  27. }
  28. /////////////////////////
  29. void HowTimes(int x)
  30. {
  31. for (int i=1;i<=x;i++)
  32. if(x%i==0) ++times;
  33. }
  34. /////////////////////
  35. TheMain(int x)
  36. {
  37. HowTimes(x);
  38. pointer();
  39. for (int i=1,int j=0;j<times,i<=x;i++)
  40. if(x%i==0){
  41. divides[j]=i;
  42. j++;}
  43. }
  44.  
  45.  
  46.  
  47.  

تم تعديل هذه المشاركة بواسطة maajed555 في 15 يناير 2009 في 21:07

#24

الخطأ الذي وجدته هو عند كتابة TheMain ، يجب أن تكتب void TheMain فتصبح هكذا:

  1.  
  2. void TheMain(int x)
  3. {
  4. HowTimes(x);
  5. Pointer();
  6. for (int i=1,int j=0;j<times,i<=x;i++)
  7. if (x%i==0) {
  8. devides[j]=i;
  9. j++;}
  10. }
  11.  
  12.  

أرجو أن أكون محقاً

تم تعديل هذه المشاركة بواسطة Abboodd في 16 يناير 2009 في 10:24

هذه الجملة خاطئة  :wacko: 


#25

غيرت بيئة التطوير عندي إلى فيجوال سي بلص بلص

وسأعيد تجربة الكود مع إضافة ملاحظة أخي الفاضل

Abboodd

ثم أعود لأعقب على مداخلته

شكرا لك أخي الكريم

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