我写了这段代码来找到二次方程的根。除非我在扫描部分之前放置一个空格,否则它似乎有效。 (例如在我写的输入中: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;
}
答案 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);