如果C中的语句未运行

时间:2020-07-09 01:44:38

标签: c if-statement nested-if

我想编写一个程序,该程序可以根据用户的输入来计算三角形的面积,我是巴西人,所以打印在葡萄牙语中,但是我认为它什么都不会改变。 所以我的问题是第一个“ if”运行完美,但是第二个“ if”仅显示第一行(Voce tem o valor dos 3 lados?(s ou n):),程序停止运行,我找不到我的错误是如果有人可以帮助我,那将是件好事;如果葡萄牙语使我变得更加困难,请告诉我,然后我翻译。 谢谢。

#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;
 }

3 个答案:

答案 0 :(得分:0)

要进行快速修复,请更改为scanf(" %c", &resposta2);,并在%c之前加一个空格。

要获得更完整的答复,请选中How to do scanf for single char in C

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

我将第二个scanf(“%c”)更改为%s,并且有效