C中的If语句是';t运行

C中的If语句是';t运行,c,if-statement,nested-if,C,If Statement,Nested If,我想编写一个程序,可以根据用户的输入计算三角形的面积,我是巴西人,所以打印的是葡萄牙语,但我认为它不会改变任何事情。 所以我的问题是第一个“如果”运行得很好,但是第二个“如果”只打印第一行(Voce tem o valor dos 3 lados?(s oun):)并且程序停止运行,我找不到我的错误在哪里,如果有人能帮我,那就好了,如果葡萄牙语让它变得更难,请让我知道并翻译它。 谢谢 #包括 #包括 #包括 void triangulo(){ 内安古洛; 浮子a、b、c、s、面积、基座、altu

我想编写一个程序,可以根据用户的输入计算三角形的面积,我是巴西人,所以打印的是葡萄牙语,但我认为它不会改变任何事情。 所以我的问题是第一个“如果”运行得很好,但是第二个“如果”只打印第一行(Voce tem o valor dos 3 lados?(s oun):)并且程序停止运行,我找不到我的错误在哪里,如果有人能帮我,那就好了,如果葡萄牙语让它变得更难,请让我知道并翻译它。 谢谢

#包括
#包括
#包括
void triangulo(){
内安古洛;
浮子a、b、c、s、面积、基座、altura、seno、rad;
字符resposta1,resposta2;
printf(“基地和阿尔图拉(s ou n):”;
scanf(“%c”和resposta1);
如果(resposta1=='s'){
printf(“Digite a base do triangulo:”);
scanf(“%f”、&base);
printf(“Digite a altura do triangulo:”);
scanf(“%f”和altura);
面积=(基地*阿尔图拉)/2;
printf(“一个三角形区域eh:%f”,区域);
}
否则{
如果(resposta1='n'){
printf(“3个lados(s ou n):”的Voce tem o valor dos;
scanf(“%c”和respost2);
如果(respost2='s'){
printf(“Digite o valor do lado:”);
scanf(“%f”、&a);
printf(“Digite o valor do lado:”);
scanf(“%f”和“b”);
printf(“Digite o valor do lado:”);
scanf(“%f”、&c);
s=(a+b+c)/2;
面积=平方米(s*(s-a)*(s-b)*(s-c));
printf(“一个三角形区域eh:%f”,区域);
}
否则{
如果(respost2='n'){
printf(“Digite o lado:”);
scanf(“%f”、&a);
printf(“Digite o outro lado:”);
scanf(“%f”和“b”);
printf(“Digite o angulo entre esses dois lados:”);
scanf(“%d”和&angulo);
拉德=3.14159265358979323846/180;
seno=sin(rad*angulo);
面积=(a*b*seno)/2;
printf(“一个三角形区域eh:%f”,区域);
}
}
}
}
回来
}
内部主(空){
三角();
返回0;
}

要快速修复,请更改为
scanf(“%c”和&respost2)
,在
%c
前面有一个空格


要获得更完整的响应,请检查

我更改了%s的第二个扫描(“%c”)并且它工作了

问题在于
scanf
函数中,您试图从标准输入中获取字符,但如果您使用
n
回答并按ENTER键,则标准输入将缓冲
\n
字符(按ENTER键时)从而跳过第二个if,如果答案是
'n'
。您可以做的是将
\n
字符添加到
scanf
函数中,就像这样
scanf(“%c\n”,&resposta1);


另一种解决方案是在
scanf
函数后放置
getchar()
,以读取额外的
\n
字符。

请阅读此内容。⟼通过采用并一致地应用,此代码可能会受益匪浅。缩进传达了结构和意图,使我们更容易理解您的代码,而无需花费大量时间破译它,而且错误也会变得更加明显,因为它们在视觉上非常突出。我认为您的
if-else
条件。我猜后续调用
scanf
时会出现此问题。您应该使用以下示例检查它们是否扫描了正确的值:
int-test=scanf(“%d”,&b)
。我建议您在这种情况下使用
切换案例
。谢谢各位,我为%s更改了第二次扫描(“%c”),我重新组织了我的代码,它成功了,谢谢
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


void triangulo(){

int angulo;
float a, b, c, s, area, base, altura, seno, rad;
char resposta1, resposta2;


printf("Voce tem os valores da base e da altura? (s ou n):  ");
scanf("%c", &resposta1);

if (resposta1 == 's'){

   printf("Digite a base do triangulo : ");
   scanf("%f", &base);


   printf("Digite a altura do triangulo : ");
   scanf("%f", &altura);

   area = (base * altura)/2;

   printf("A area do triangulo eh : %f", area);

}

else{

  if(resposta1 == 'n'){

        printf("Voce tem o valor dos 3 lados? (s ou n): ");
        scanf("%c", &resposta2);

        if(resposta2 == 's'){


        printf("Digite o valor do lado : ");
        scanf("%f", &a);

        printf("Digite o valor do lado : ");
        scanf("%f", &b);

        printf("Digite o valor do lado : ");
        scanf("%f", &c);

        s = (a + b + c)/2;

        area = sqrt(s * (s - a) * (s - b) * (s - c));

        printf("A area do triangulo eh : %f", area);
   }


    else{   
       if(resposta2 == 'n'){

         printf("Digite o lado : ");
         scanf("%f", &a);

         printf("Digite o outro lado : ");
         scanf("%f", &b);

         printf("Digite o angulo entre esses dois lados : ");
         scanf("%d", &angulo);

         rad = 3.14159265358979323846/180;

         seno = sin(rad * angulo);

         area = (a * b * seno)/2;

         printf("A area do triangulo eh : %f", area);
 }


}
   }
      }




 return;
        }

int main (void){

triangulo();


return 0;
 }