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