我正在学习 C 语言基础知识并编写一个简单的一阶方程求解器。我希望输入正好是 ax+b=c 或 ax-b=c,其中 a、b、c 是 double 类型。我正在使用 scanf() 读取用户输入并检查其形式是否正确。但是,如果我输入负 double ,例如 -4.6,作为等式中的“a”,scanf()
将无法正确读取 a、b、c。我在 scanf()
中使用 %lf。那么我如何读取负 double 呢?非常感谢。
我的代码:
#include <stdio.h>
int main(void)
{
double a,b,c,x;
printf("Enter the expression:\n");
if (scanf("%lfx%lf=%lf", &a, &b, &c) == 3)
{
x = (c - b)/a;
printf("x=%.2f\n", x);
}
else if (scanf("%lfx+%lf=%lf", &a, &b, &c) == 3)
{
x = (c - b)/a;
printf("x=%.2f\n", x);
}
else
printf("Invalid expression\n");
return 0;
}
最佳答案
直接使用 scanf()
(而不是 fgets()
和 sscanf()
)的困难之一是工作当它出错时,它会到哪里。
您还可以通过注意 scanf()
返回成功转换的数量来帮助自己。您应该测试:
if (scanf("%lfx+%lf=%lf", &a, &b, &c) != 3)
...something went wrong...
else
...more code using successfully read data...
只要数据正确并且没有遇到 EOF,您所得到的就应该可以正常工作。也就是说,调用是格式正确的;它发生的上下文可能不那么干净。
此外,由于您希望在两个术语之间允许使用“+”或“-”,因此您确实需要转向读取下一个标记(可能是负数、“x”、“+'或'-',以及另一个(可能是负数)数字)。然后你可以解释这些。如果用户输入“-2.3x-4.5=9.1”,则使用 scanf()
是一场灾难,那么当扫描在(第二个)“-”上失败时,您将无法返回并以负数格式重新读取整个数据。或者您需要将分隔符“+”或“-”读取为字符值。
关于c - 如何在 C 中使用 scanf() 读取负 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939913/