我想编写一个程序,该程序可以根据用户的输入来计算三角形的面积,我是巴西人,所以打印在葡萄牙语中,但是我认为它什么都不会改变。 所以我的问题是第一个“ 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;
}
答案 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,并且有效