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

خطأ بسيط في كود البرنامج

مغلق
بدأه maas في 19 فبراير 2006 · 4 رد · 463 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

يا شباب عندي مشكلة في الكود

و هي انه الSwitch ما تقبل float أو double

حاولت أجوف مواقع و صفحات و لكن للأسف ما فهمت

و إن شاء الله تساعدوني

#include<iostream.h>
#include<cmath>
int main()
{
	char r[3];
	double num1;
	double num2;
	char op;
	char answer;
	double total;

	do
	{
     cout<<"Enter an equation(number-operation-number)\n";

	for (int i=0;i<3;i++)
	{ 
  cin>>r;
  num1=r[0];
  op=r[1];
  num2=r[2];
  
	}


	switch (num1){
  case '1':
  num1=1;
  break;
  case '2':
  num1=2;
  break;
  case '3':
  num1=3;
  break;
  case '4':
  num1=4;
  break;
  case '5':
  num1=5;
  break;
  case '6':
  num1=6;
  break;
  case '7':
  num1=7;
  break;
  case '8':
  num1=8;
  break;
  case '9':
  num1=9;
  break;
  case '0':
  num1=0;
  break;
	}

switch (num2){
  case '1':
  num2=1;
  break;
  case '2':
  num2=2;
  break;
  case '3':
  num2=3;
  break;
  case '4':
  num2=4;
  break;
  case '5':
  num2=5;
  break;
  case '6':
  num2=6;
  break;
  case '7':
  num2=7;
  break;
  case '8':
  num2=8;
  break;
  case '9':
  num2=9;
  break;
  case '0':
  num2=0;
  break;
	}
switch (op){
  case '+':
 	 total=num1+num2;
 	 break;
  case '-':
 	 total=num1-num2;
 	 break;
  case '*':
 	 total=num1*num2;
 	 break;
  case '/':
 	 {
    if(num2==0) 
    {
    cout<<"error\n";
    }
    else 
 	 total=num1/num2;
 	 }
 	 break;
  }

 if (num1>=0 && num2>=0&& num1<=9 && num2<=9)
  cout<<"The total is  "<<total<<"\n";
	else if (cout<<"Error") {

cout<<"Do You Want to Repeat?(answer 'y' or 'N')";
cin>>answer;
	}
	else
	cout<<"Error";

cout<<"Do You Want to Repeat?(answer 'y' or 'N')";
cin>>answer;
}
	while (answer=='y');



	return 0;
}

المشكلة في الكود انه ما يقبل float أو double لأنه في القسمة يطلع لي الرقم إذا كان int / int الجواب يطلع بصفر إذا كان الجواب عدد غير صحيح

فانه بغيت أحل هالمشكلة

#2
اقتباس
The switch statement allows selection among multiple sections of code, depending on the value of expression. The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type.

تلقاه على هذا الرابط

http://msdn.microsoft.com/library/default....m/statem_10.asp

#3

بس لكن أخوي هل في حل؟؟

لأني شاهدت هالصفحة من قبل و ما فهمت شي

#4

مش فاهمك أبداً....

اقتباس
cin>>r;

num1=r[0];

op=r[1];

num2=r[2];

هذا غلط...

بدك تاخذ الخلية الأولى في السلسلةchar وتضعها في متغير float على انها الرقم الاول ؟؟؟؟؟

يعني لو المستخدم كتب 1.253 وين هالرقم بده يروح في 1بايت اللي هو الخلية الواحدة من سلسلة char

ارجو أن تعيد النظر في كل البرنامج ...

أخي توجهك العام لحل المشكلة مش صحيح (أعذرني لم أجد كلمة أرق من مش صحيح :) )

خذ كل المعادلة من المستخدم في سلسلة حرفية ...

وبعدين قم بالمرور على هذه السلسة واستخرج منها الأرقام والعمليات ...

تخيل السلسة سيكون شكلها هيك مثلاً:

[1][.][3][1][+][2][2][.][5][3]

بعدين انت وسطارتك تطلع

1.31 رقمfloat

+ رمز chat

22.53 رقم float

هذه فكرة سريعة ..

الذي لديه خوارزمية أفضل لحل هذه المشكلة يمكن أن يفيدك... كتبت هذه الفكرة فقط لأريك أنه يمكنك التفكير بطريقة مختلفة.

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 20 فبراير 2006 في 13:59

#5

هذا برنامج عملته زمان ...

يقوم بتحويل الرقم من* char الى عدد double طبعا البرنامج يحتاج بعض التعديلات.. بس الفكرة واضحة

اللي عندة أفكار أقل تعقيدًا فليتحفنا ...

أي سؤال في الكود تفضل..

#include<iostream.h>
  #include<conio.h>
  #include<math.h>


  double StrToNum(char * str)//Function that converts char string to number
  {
   int i=0,point,po=1;
   double ret=0;


   for(i=0;str>='0'&&str<='9';i++);// finding the location of the float point

   point=i; //the point location is i

   for(i=0;i<point;i++)
   ret=ret+(str-'0')*pow(10,point-i-1);//[1][5][.]= 1*10 power 1, 5*10 power 0 (1)

   for(i=point+1;str;i++)//the numbers after the point(.)
   ret=ret+(str-'0')/pow(10,po++);

   return ret;

  }


//double StrToNum(char * str);
  main()
  {
  clrscr();
  char * string="2355.22";
  double Num;
  Num = StrToNum(string);
  cout<<"      "<<Num<<endl;

  }

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

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