Если оператор в C не работает - PullRequest
0 голосов
/ 09 июля 2020
• 1000 Итак, моя проблема в том, что первое «если» работает идеально, но второе «если» выводит только первую строку (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 голосов
/ 09 июля 2020

Я изменил второй scanf ("% c") на% s, и он сработал

0 голосов
/ 09 июля 2020

Проблема в функции scanf, вы пытаетесь получить символ из стандартного ввода, но если вы ответите с помощью n и нажмете ENTER, стандартный ввод буферизует символ \n (когда вы нажали ENTER ), таким образом пропуская второй, если ответ - 'n'. что вы можете сделать, так это добавить символ \n к вашей функции scanf, например, scanf("%c\n", &resposta1);

Другое решение - поставить getchar() после функции scanf, чтобы прочитать этот дополнительный \n характер.

0 голосов
/ 09 июля 2020

Для быстрого исправления измените значение на scanf(" %c", &resposta2); с пробелом перед %c.

Для получения более полного ответа проверьте Как выполнить scanf для одного символа в C

...