1. Stuck on a problem. Help needed please.

Hello, I am teaching myself programming using Kochan's "Programming in C" book.

I am stuck on an exercise and was hoping you guys could help me out. Here is the question:

4. Write a program that acts as a simple “printing” calculator.

The program should allow the user to type in expressions of the form:

number operator

The following operators should be recognized by the program:

+ - * / S E

The S operator tells the program to set the “accumulator” to the typed-in number.

The E operator tells the program that execution is to end.

The arithmetic operations
are performed on the contents of the accumulator with the number that was keyed in acting as the second operand.

The following is a “sample run” showing how the program should operate:

Begin Calculations
10 S //Set Accumulator to 10
= 10.000000 //Contents of Accumulator
2 / //Divide by 2
= 5.000000 //Contents of Accumulator
55 - //Subtract 55
-50.000000
100.25 S //Set Accumulator to 100.25
= 100.250000
4 * //Multiply by 4
= 401.000000
0 E //End of program
= 401.000000
End of Calculations.

Make certain that the program detects division by zero and also checks for unknown operators.

Thank you so much for your help guys!

2. I would suggest looking into a Case Switch menu to get you started with your outline.

3. What is your code thus far?

4. code thus far

Originally Posted by Matticus
What is your code thus far?
Ok I think I mainly got it. The only thing I don't understand is it will accept a user input with no spaces (such as 5S or 2*) for everything except for the E operator. In that case the user has to format it like 0 E (with a space in between 0 and E). Let me know what you think:

Code:
```#include <stdio.h>

int main (void)

{
float number, a;
char operator = 'S';

printf("Begin calculations. \n");

while (operator != 'E')
{
scanf("%f  %c", &number, &operator);

switch (operator)
{
case 'S':
a = (number);
printf ("= %f\n", a);
break;

case '+':
a = (a + number);
printf ("= %f\n", a);
break;

case '-':
a = (a - number);
printf ("= %f\n", a);
break;

case '*':
a = (a * number);
printf ("= %f\n", a);
break;

case '/':
if (number == 0)
printf("You can't divide by zero, idiot!\n");
else
a = (a / number);
printf ("= %f\n", a);
break;

case 'E':
printf ("= %f\n End of Calculations.\n", a);
break;

default:
printf ("Unknown operator.\n");
break;

}

}
}```

5. The only thing I don't understand is it will accept a user input with no spaces (such as 5S or 2*) for everything except for the E operator.
Because you are asking for two inputs; a floating point value, and a character.

But "0E..." is scientific notation for a floating point value, so the entire argument is taken as a single statement; 0E (which equates to 0^something which equals zero) and therefore no following character is read.

 If in doubt, play with it.

Code:
```#include <stdio.h>

int main(void)
{
float fTest;
char  cTest;

scanf("%f  %c",&fTest,&cTest);

printf("%.6e\t%c\n",fTest,cTest);

return 0;
}

// input 1:
// 4R
// output 1:
// 4.000000e+3   R
//
// input 2:
// 0E
// (nothing happens when I press 'enter', so I then type a 'w'...)
// w
// (...and get an output)
// output 2:
// 0.000000+e000   w
//
// FINAL TEST:
// input 3:
// 1E-3q
// output 3:
// 1.000000e-003  q```

6. Ahhh I see.

Originally Posted by Matticus
Because you are asking for two inputs; a floating point value, and a character.

But "0E..." is scientific notation for a floating point value, so the entire argument is taken as a single statement; 0E (which equates to 0^something which equals zero) and therefore no following character is read.