So i made a calculator in C and it works, but i want to get rid of some bugs and it has to do with scanf. The problems i encountered are:
- if i enter 5 5 , both number 1 and number 2 will be 5. Any way i can ignore the space and take the number as 55?
- if i enter 5c, it will read number 1 as 5 then it will trigger the failsafe (because of the 'c') and close.
- if i enter a very large number, it will give a false result. Any way i can make a limit of 15 numbers?
I think i have to replace scanf with fgets , but i dont know how to implement this because of how i wrote my code. Any ideas?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void print_help(void);
int main (void)
{
float nr1, nr2, rezultat;
char operatia;
int failsafe; //failsafe
print_help(); //show help
printf("Salut! Am nevoie de un numar: "); //first number
failsafe = scanf("%f", &nr1);
if (failsafe == 1)
{
printf("Ok. Mersi!\r\n");
}
else
{
printf("bruh..");
sleep(2);
exit(-1);
}
printf("Am nevoie de inca un numar: "); //second number
failsafe = scanf("%f", &nr2);
if (failsafe == 1)
{
printf("Haha! foarte buna alegere.\r\n");
}
else
{
printf("bruh..");
sleep(2);
exit(-1);
}
printf("Bun. Ce operatie vrei sa aplic? (scrie doar unul dintre simbolurile prezentate mai sus)\n Raspunsul tau: "); //asking for the operation symbol
scanf(" %c", &operatia);
switch (operatia) //------calculare------
{
case '+':
rezultat = nr1 + nr2;
break;
case '-':
rezultat = nr1 - nr2;
break;
case '/':
if (nr2 == 0)
{
printf("nah man. im out.");
sleep(2);
exit(-2);
}
rezultat = nr1 / nr2;
break;
case '*':
rezultat = nr1 * nr2;
break;
default:
printf("bruh..");
sleep(2);
exit(-1);
}
printf("Rezultatul tau este: %.2f", rezultat); //afisare
sleep(1); //
printf("\r\nThank you and..."); //
sleep(1); //afisare rezultat
printf("Goodbye!"); //
sleep(3); //
return 0;
}
//-----------behind the scenes-----------
void print_help(void)
{
printf("-----------------------------\n\r");
printf("\tCalculator v1.2\r\n\r\n");
printf("-> simbolul pentru adunare este: + \r\n\r\n");
printf("-> simbolul pentru scadere este: - \r\n\r\n");
printf("-> simbolul pentru inmultire este: * \r\n\r\n");
printf("-> simbolul pentru impartire este: / \r\n\r\n");
printf("-----------------------------\n\r");
return;
}