-1

编译器错误:

pythagoras.c: In function ‘main’:
pythagoras.c:22:4: fejl: ‘else’ without a previous ‘if’
pythagoras.c:29:5: fejl: ‘else’ without a previous ‘if’

编码:

#include <stdio.h>
#include <math.h>
int main(void)
{
  double a, b, c;
  double secondside1, secondside2, secondside3;
char Scanres;
printf("Hvilken side vil du finde? a, b eller c?\n");
Scanres = scanf("%c", &Scanres);
secondside1 = a * a;
secondside2 = b * b;
secondside3 = c * c;

    if(Scanres = c);

    printf("Indtast værdierne af a og b\n");
    scanf("%lf%lf", &a, &b);
    c = sqrt(secondside1 + secondside2);
        printf("c er %f", c);

        else if(Scanres = b);

        printf("Indtast værdierne af a og c\n");
        scanf("%lf%lf", &a, &c);
        b = sqrt(secondside3 - secondside2);
        printf("b er %f\n", b);

            else(Scanres = a);

            printf("Indtast værdierne af b og c\n");
            scanf("%lf%lf", &b, &c);
            a = sqrt(secondside3 - secondside1);
            printf("a er %lf", a);
return 0;
}
4

4 回答 4

3

语句的语法if是:

if (expr) statement;

statement可能是一个指令块,所以你必须添加括号。

int main(void)
{
    double a, b, c;
    double secondside1, secondside2, secondside3;
    char Scanres;
    printf("Hvilken side vil du finde? a, b eller c?\n");
    Scanres = scanf("%c", &Scanres);
    secondside1 = a * a;
    secondside2 = b * b;
    secondside3 = c * c;

    if (Scanres == c) 
    {
        printf("Indtast værdierne af a og b\n");
        scanf("%lf%lf", &a, &b);
        c = sqrt(secondside1 + secondside2);
        printf("c er %f", c);
    }
    else if (Scanres == b) 
    {

        printf("Indtast værdierne af a og c\n");
        scanf("%lf%lf", &a, &c);
        b = sqrt(secondside3 - secondside2);
        printf("b er %f\n", b);
    }
    else 
    {
        printf("Indtast værdierne af b og c\n");
        scanf("%lf%lf", &b, &c);
        a = sqrt(secondside3 - secondside1);
        printf("a er %lf", a);
    }
    return 0;
}
  • else不需要表达。
  • 你不使用好的运算符。==是比较运算符,不是=
  • a,b并且c没有被初始化。
  • scanf返回值是成功匹配和分配的输入项的数量,而不是读取的值。

你应该阅读基础。

于 2012-10-17T15:33:16.720 回答
1

C 中的比较运算符是==. 用一个单一的=你正在做任务。

此外,在 之后有一个分号if()使其执行一个空语句,而不是您认为的代码路径。

请注意,缩进在 C 中是免费的,它没有任何意义,因此如果它看起来不合理,编译器不会警告您。

此外,这:

Scanres = scanf("%c", &Scanres);

没有多大意义。该scanf()函数会将它读入的字符写入Scanres,但随后您将通过将 的返回值scanf()(即它进行的转换次数)存储到同一个变量中来覆盖该值。

于 2012-10-17T15:32:42.753 回答
1

嘿删除分号

if(Scanres = c);

并使用括号如

if ( statement)
{
  code
}
else if ( statement )
{
code
}
else
{
code
}

这应该解决它。请确保您正确输入定义的变量“a”“b”和“c”

#include <stdio.h>
#include <math.h>
int main(void)
{
  double a, b, c;
  a = 10 ;
  b = 12 ;
  c = 15 ;

  // Here you must make it that the user inputs the 3 variables ; I have entered them manually first 
  // Use scanf or fgets to input the 3 variables. And there you go !!

  double secondside1, secondside2, secondside3;
  char Scanres;
  printf("Hvilken side vil du finde? a, b eller c?\n");
  Scanres = scanf("%c", &Scanres);
  secondside1 = a * a;
  secondside2 = b * b;
  secondside3 = c * c;

    if(Scanres == c)
    {
    printf("Indtast værdierne af a og b\n");
    scanf("%lf%lf", &a, &b);
    c = sqrt(secondside1 + secondside2);
        printf("c er %f", c);
    }
        else if(Scanres == b)
    {
        printf("Indtast værdierne af a og c\n");
        scanf("%lf%lf", &a, &c);
        b = sqrt(secondside3 - secondside2);
        printf("b er %f\n", b);
    }
    else if(Scanres == a)
    {
            printf("Indtast værdierne af b og c\n");
            scanf("%lf%lf", &b, &c);
            a = sqrt(secondside3 - secondside1);
            printf("a er %lf", a);
    }
return 0;
}
于 2012-10-17T15:33:36.373 回答
1

您的 if/else 语法很不可靠,您需要使用花括号{}来识别与每个条件关联的块。此外,使用==运算符来测试相等性:

if (Scanres == c) { /* Start the block for this case */
  /* ... */
} else if (Scanres == b) { /* Here's how you do an "else if" block. */
  /* ... */
于 2012-10-17T15:34:40.013 回答