PDA

View Full Version : ادامه دار کردن برنامه بدون دستور scanf



MrasoolF
چهارشنبه 29 آذر 1391, 12:31 عصر
سلام. من یک برنامه ماشین حساب نوشتم. دو تا مشکل باهاش دارم
یکی اینه میخوام بعد از انجام یه محاسبه به کارش پایان نده و دوباره کار کنه
دوم اینکه نمیتونم دستور توان رو بهش اضافه کنم.
در کار هم مجاز به استفاده از دستور scanf نیستم ولی اگه راه دیگه ای نداره با همون کمکم کنید
ممنون
اینم کدم.
#include <stdio.h>
#include <conio.h>

//Tabe Tashkhise Adad.
int isNum(char Chr)
{
if ( '0' <= Chr && Chr <= '9' ) return 1;
return 0;
}

//Tabe Tashkhise Amalgar.
int isOp ( char Chr )
{
if ( Chr == '+' || Chr == '-' || Chr == '*' || Chr == '/' ) return 1;
return 0;
}

int isSing( char Chr )
{
if ( Chr == '+' || Chr == '-' || Chr == '.') return 1;
return 0;
}

//Tabe Mohasebe.
float calcIt( float Num1 , char Op , float Num2 )
{
float Result = 0;
switch (Op)
{
case '+':
Result = Num1 + Num2;
break;
case '-':
Result = Num1 - Num2;
break;
case '*':
Result = Num1 * Num2;
break;
case '/':
Result = Num1 / Num2;
break;
default:
//Agar Operator Eshtebah bood.
printf("Wrong Parameter!!!");
Result = 0;
break;
}
return Result;

}

int main(int argc, char *argv[])
{

float
Num1 = 0 ,
Num2 = 0 ,
Result = 0 ;

int
IntResult = 0 ,
OpIndex = 0 ,
Index = 0 ,
IsOp = 0 ;


char
Op = ' ' ,
InputCh = '0' ,
CNum1 [10] = {0,0,0,0,0,0,0,0,0,0} ,
CNum2 [10] = {0,0,0,0,0,0,0,0,0,0} ;

do
{
InputCh = getche();
//Check kardane Voroodi.
if( !isNum(InputCh) && !isOp(InputCh) && !isSing(InputCh)&& InputCh != '\r' )
{
printf("\nWRONG PARAMETER!!!\n");
getch();
return 0;
}

//Tashkhise Operator
if ( isNum(InputCh) && (IsOp == 0)) IsOp = 1;

if (IsOp == 1 && isOp(InputCh))
{
IsOp = -1 ;
Op = InputCh;
Index = 0 ;
OpIndex ++ ;

continue;
}
//Zakhire Adad
if (InputCh != '\r' && (isNum(InputCh) || isSing(InputCh)))
{
if (OpIndex == 0)
CNum1[Index] = InputCh;
else
CNum2[Index] = InputCh;
Index ++;
}
} while(InputCh != '\r');

//Tabdile Reshte Be Adad.

sscanf ( CNum1 , "%f" , &Num1);
sscanf ( CNum2 , "%f" , &Num2);

//Check kardane Operator.
if (Op == ' ')
{
printf("\nWARNING: Oprator Missing!!!\n");
printf("%f\n" , Num1);
getch();
return 0;
}
//Mohasebe kardan
Result = calcIt(Num1 , Op , Num2);

if ( (Result - (int)Result) == 0 )
{
//Chape natije (Agar Natije Adade Sahih bud)
IntResult = Result ;
printf ("\nResult = %d\n" , IntResult);
}
else
{
//Chape Natije (Agar Adade Sahih nabud)
printf ("\nResult = %f\n" , Result);
}

//Chape Ravande Hesab kardane Natije
//printf( "\nOp1 = %f \nOprator = %c \nOp2 = %f \nResult = %f \n" , Num1 , Op , Num2 , Result);
getch();
return 0;
}

Arashdn
چهارشنبه 29 آذر 1391, 14:10 عصر
سلام
واسه تموم نشدن برنامه میتونی کل برنامه رو توی یه دونه

while(1)
{
}
بزاری و در اخر یه
system("CLS")
هم بزن تا صفحه پاک بشه