【发布时间】:2020-08-14 23:11:47
【问题描述】:
所以我用 C 语言做了一个计算器,它可以工作,但我想摆脱一些错误,它与 scanf 有关。 我遇到的问题是:
- 如果我输入 5 5 ,数字 1 和数字 2 都将是 5。有什么方法可以忽略空格并将数字作为 55?
- 如果我输入 5c,它会将数字 1 读取为 5,然后它会触发故障保护(因为 'c')并关闭。
- 如果我输入一个非常大的数字,它会给出一个错误的结果。有什么办法可以限制 15 个数字?
我认为我必须将 scanf 替换为 fgets ,但由于我编写代码的方式,我不知道如何实现这一点。有什么想法吗?
#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;
}
【问题讨论】:
-
最好用
double而不是float,把scanf("%f", &nr1);改成scanf("%lf", &nr1);如果你想把"5 5"读成"55"你就得处理自己输入。 -
为什么使用
double而不是float会更好?像这样的例子,精度和更多的内存值得吗?
标签: c calculator