【发布时间】:2021-03-05 17:19:33
【问题描述】:
我正在努力完成一项我必须做的运动。因此我必须编写一个计算器。它只需要知道 int 和 +、-、/ 和 * 等运算符,我们需要使用 fgets() 和 sscanf()。
例如,如果我首先输入 5+6,它完全可以正常工作。作为输出,我得到了正确的输出:5+6=11。如果我的第二个条目类似于“a”或“4”,它不会像它应该那样打印出“无效输入”。相反,它会打印 4+6=10,因此加号和 6 会自动相加。我认为它与 fgets() 及其内存有关,但我不知道如何解决这个问题。 到目前为止,这是我的代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
/* First define the variables, which are needed.
There are two numbers, type int, and one op for the operation. */
int number1, number2;
char operator;
char entry[50];
/* First Output, where numbers and Operation are added, after that the code has to scan, which numbers and which operator were choosen.*/
while (1)
{
printf("Enter <int> <op> <int>, single '0' to exit:");
fgets(entry, sizeof(entry), stdin);
sscanf(entry, "%d %c %d", &number1, &operator, & number2);
/* Different calculations regarding the operator*/
if (operator== '+')
{
printf("%d + %d = %d", number1, number2, number1 + number2);
}
else if (operator== '-')
{
printf("%d - %d = %d", number1, number2, number1 - number2);
}
else if (operator== '*')
{
printf("%d * %d = %d", number1, number2, number1 * number2);
}
else if (operator== '/')
{
printf("%d / %d = %d", number1, number2, number1 / number2);
}
else if (number1 == 0)
{
printf("Goodbye");
break;
}
else if (number2=="\0" && operator =="\0" ||operator=="\0" )
{
printf("invalid input");
}
else
{
printf("invalid input");
}
printf("\n");
}
return 0;
}
感谢您的帮助:)
例子:
Enter ,单 '0' 退出:4+5 4 + 5 = 9
Enter ,单 '0' 退出:f 4 + 5 = 9
Enter ,单 '0' 退出:g 4 + 5 = 9
Enter ,单 '0' 退出:6-4 6 - 4 = 2
Enter ,单 '0' 退出:7 7 - 4 = 3
Enter ,单 '0' 退出:gergevyd 7 - 4 = 3
【问题讨论】:
-
检查
sscanf的返回值并处理错误情况。目前,您忽略它并使用无效的输入值继续耕作。 -
谢谢 :) 我尝试这样做,所以我添加了更多其他 if 语句,但这并没有什么机会。好像是覆盖什么的
-
我试过这样做。你需要展示你尝试过的东西。除非您展示出来,否则我们无法判断您是否正确操作。
-
@Saphira14 如果
fgets返回NULL或sscanf不返回3,那么您没有有效的输入,因此没有指向if/else的值。跨度> -
您说您尝试过,但实际上并没有按照您的建议“检查 sscanf 的返回值”。
标签: c scanf calculator fgets