C-空格中的scanf导致删除

时间:2016-11-18 22:41:11

标签: c scanf

我写了这段代码来找到二次方程的根。除非我在扫描部分之前放置一个空格,否则它似乎有效。 (例如在我写的输入中:a=1,b=2, c=1)。在这种情况下,它只是删除变量。 (在我给出的c示例中,将从输入中删除,因此我收到的答案是0,-2而不是-1。)。如果我将空间放在其他地方(a =1,b= 2,c=1),代码就可以工作。

如何解决此问题?

int main()
{
    double root1 = 0, root2 = 0;
    double a = 0., b = 0., c = 0.;
    printf("Enter a polynomial:\n");
    scanf("a=%lf,b=%lf,c=%lf", &a, &b, &c);

    {
        if (a == 0)
        {
            return 0;
        }
        if ((b * b - 4 * a * c) == 0)
        {
            root1 = -b / 2 * a;
            printf("root is %f", root1);
        }
        else if ((b * b - 4 * a * c) < 0)
        {
            printf("There are no roots");
        }
        else {
            root1 = (-b + sqrt(b * b - 4 * a * c)) / 2* a;
            root2 = (-b - sqrt(b * b - 4 * a * c)) / 2* a;
            printf("Roots are %f,%f", root1, root2);
        }
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

使用允许在意外位置留出空间的格式。并检查结果。

//         v v    v v v    v v v
if (scanf(" a =%lf , b =%lf , c =%lf", &a, &b, &c) == 3) Oh_Happy_day();

"%lf"之前需要 空格,因为该说明符将扫描前导空白区域。有些人喜欢明确

//             x         x         x Optional
if (scanf(" a = %lf , b = %lf , c = %lf", &a, &b, &c) == 3) Oh_Happy_day();

最好还是使用fgets()来阅读,然后解析它。

答案 1 :(得分:0)

没有办法解决这个问题;这实际上是函数scanf()的一个问题;本身。或者,您可以使用fgets();代替。 尝试更换

double a=0.,b=0.,c=0.;
printf("Enter a polynomial:\n");
scanf("a=%lf,b=%lf,c=%lf",&a,&b,&c);

double a=0.0,b=0.0,c=0.0;
printf("Enter a polynomial:\n");
scanf(" %lf, %lf, %lf",&a,&b,&c);

答案 2 :(得分:0)

因为空格是您在scanf中使用的格式化字符串的一部分。

您应该在格式化字符串中添加前导空格:

scanf(" a=%lf, b=%lf, c=%lf", &a, &b, &c);