c - 如何在 C 中使用 scanf() 读取负 double ?

标签 c double scanf

我正在学习 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/

相关文章:

c - 交替线程打印 C

c - : *** [test] Error 10 signify? 是什么品牌

c - fscanf 从文本文件读取二维 double 组时出现问题

c - 从http套接字中提取位置

c - 无法将 header 设置为指向链表中的新节点

c - SSLv23 不允许 sslv3 客户端连接

c - 当你有字符串和双变量时如何扫描

mysql - 如何在 MySQL 中将 BLOB 转换为 DOUBLE

java - 使用Java Double的Mysql DOUBLE列数据被截断异常

C++ sscanf 在编译时抛出不相关类型的 "no suitable conversion"错误