Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果两者都被执行_C_If Statement - Fatal编程技术网

C 如果两者都被执行

C 如果两者都被执行,c,if-statement,C,If Statement,我有一个简单的c程序奇怪的问题 #include<stdio.h> #include<math.h> #include<conio.h> main() { int a, b, c, delta; float x1, x2; printf("Please Enter a,b,c :"); scanf("%d%d%d",&a,&b,&c); delta = (b * b) - (4 * (a * c

我有一个简单的c程序奇怪的问题

#include<stdio.h> 
#include<math.h>
#include<conio.h>
main() {
    int a, b, c, delta;
    float x1, x2;
    printf("Please Enter a,b,c :");
    scanf("%d%d%d",&a,&b,&c);
    delta = (b * b) - (4 * (a * c));
    if(delta < 0){
        printf("No roots!");
    } 
    else{
        if (delta >= 0){
            x1 = (-b + sqrt(delta)) / (2 * a);
            x2 = (-b - sqrt(delta)) / (2 * a);
        }
    }
    printf("r1=%f and r2=%f", x1, x2);
    getch();

}
#包括
#包括
#包括
main(){
INTA、b、c、δ;
浮点x1,x2;
printf(“请输入a、b、c:”);
scanf(“%d%d%d”、&a、&b和&c);
δ=(b*b)-(4*(a*c));
if(δ<0){
printf(“没有根!”);
} 
否则{
如果(增量>=0){
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
}
}
printf(“r1=%f和r2=%f”,x1,x2);
getch();
}
当我输入
211
时,程序似乎在第10行和第13行执行
if
else
。 输出为
无根!x1=0.0000和x2=0.0000
怎么了

No roots!x1=0.0000 and x2=0.0000
如果没有根,您实际上有未定义的行为,因为下面

printf("r1=%f and r2=%f", x1, x2);
您正试图打印未初始化的
x1
x2
的值。而该行的执行与
if
条件无关(由于您将其放入代码中的位置)

如果执行了和则执行了,为什么您会假定这两个都执行了?

语句

  printf("r1=%f and r2=%f", x1, x2);
不在else子句中。如果(delta>=0){,则不需要
。将代码更改为

if(delta < 0) {
  printf("No roots!");
} 
else {
  x1 = (-b + sqrt(delta)) / (2 * a);
  x2 = (-b - sqrt(delta)) / (2 * a);
  printf("r1=%f and r2=%f", x1, x2);
}
getch();
if(增量<0){
printf(“没有根!”);
} 
否则{
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
printf(“r1=%f和r2=%f”,x1,x2);
}
getch();

如果
其他
都不执行
,发生的事情是
x1
x2
必须打印出来,它们的值被打印为
0
0
。我建议将
printf(“r1=%f和r2=%f”,x1,x2)
else
中。另外,我建议将
else{if
设置为
else
,因为
if
是不必要的。下面是我的建议

#include<stdio.h> 
#include<math.h>
#include<conio.h>
main() {
    int a, b, c, delta;
    float x1, x2;
    printf("Please Enter a,b,c :");
    scanf("%d%d%d",&a,&b,&c);
    delta = (b * b) - (4 * (a * c));
    if(delta < 0){
        printf("No roots!");
    } 
    else {
        x1 = (-b + sqrt(delta)) / (2 * a);
        x2 = (-b - sqrt(delta)) / (2 * a);
        printf("r1=%f and r2=%f", x1, x2);
    }

    getch();

}
#包括
#包括
#包括
main(){
INTA、b、c、δ;
浮点x1,x2;
printf(“请输入a、b、c:”);
scanf(“%d%d%d”、&a、&b和&c);
δ=(b*b)-(4*(a*c));
if(δ<0){
printf(“没有根!”);
} 
否则{
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
printf(“r1=%f和r2=%f”,x1,x2);
}
getch();
}

您希望得到什么样的输出?我希望看到的只是没有根或根:),但我发现了我的问题@ed heal发现了它:))