【问题标题】:If statement in C aren't running如果 C 中的语句没有运行
【发布时间】:2020-07-09 01:44:38
【问题描述】:

我想编写一个可以根据用户输入计算三角形面积的程序,我是巴西人,所以打印的是葡萄牙语,但我认为它不会改变任何东西。 所以我的问题是第一个“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;
 }

【问题讨论】:

  • 请阅读此内容。 c-faq.com/stdio/scanfprobs.html
  • ⟼通过采用indentation style 并一致地应用它,这段代码可以受益匪浅。缩进传达了结构和意图,使我们更容易理解您的代码,而无需花费大量时间来破译它,而且它还可以使错误更加明显,因为它们在视觉上很突出。
  • 我认为您的if-else 条件没有任何问题。我猜scanf 的后续调用会出现这个问题。您应该检查它们是否是 scanning 正确的值,使用以下示例:int test = scanf("%d", &amp;b);。我建议你在这种情况下使用switch-cases
  • 谢谢大家,我为 %s 更改了第二个 scanf("%c"),我重新组织了我的代码,它成功了,谢谢

标签: c if-statement nested-if


【解决方案1】:

为了快速解决问题,请更改为 scanf(" %c", &amp;resposta2);,在 %c 之前添加一个空格。

如需更完整的回复,请查看How to do scanf for single char in C

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我为 %s 更改了第二个 scanf("%c") 并且它起作用了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        相关资源
        最近更新 更多