不断在C中收到错误消息是什么意思?

时间:2020-06-25 02:24:58

标签: c cs50

有人可以向我解释这些错误消息是什么意思,我不断收到“错误:预期为';'在顶层声明之后”和“期望的标识符或'('”。我对编程很陌生,不了解任何建议,我的程序是否正确编码?它的目的是检查用户输入的内容是否正确产生一个三角形。这是我的代码:

#include <cs50.h>
#include <stdio.h>
bool check_triangle(float x, float y, float z);
int main(void)

{
     printf("what is the length of the first side of the triangle: ");
     float x = get_float();
     printf("what is the length of the second side of the triangle: ");
     float y = get_float();
      printf("what is the length of the third side of the triangle: ");
     float z = get_float();
    
bool check_triangle(float x, float y, float z);
    if
        {
            (x <= 0 || y <= 0 || z <= 0)
            return false;
        }
    if  
         {
            ( x+ y <= z || x +  <= y || y + z <= x)
             return false;
         }
    return true
}

2 个答案:

答案 0 :(得分:1)

学习C语言时,您会在语法方面遇到很多困难。首先,C不允许嵌套函数。尽管缺少'}'的{​​{1}}结尾可能解释了部分问题-似乎您正在尝试在main()内定义check_triangle(),但这是行不通的

接下来,除非函数是如此之长,否则禁止将其仅放置在main()上方而不完全弄乱您的文件,请忘记尝试提供main()上方的函数原型和下方的定义-您可以稍后再做。

在您的测试中,main()是不完整的表达式。看来您是偶然地遗漏了x + <= y。然后,在您尝试对z进行定义后,请包含一个流浪';'-函数check_triangle()在结束{{1 }}定义参数。

如果您修复了这些错误,您的功能将如下所示:

return type function_name (arguments) { /* body */ }

在CS50中,您的';'函数期望提供一个字符串作为提示。您不需要单独的')'语句。相反,您需要例如:

bool check_triangle (float x, float y, float z) {
    
    if (x <= 0. || y <= 0. || z <= 0.) {
        return false;
    }
    
    if ( x + y <= z || x + z <= y || y + z <= x) {
        return false;
    }
    
    return true;
}

最后,您需要调用函数get_float()来检查输入的内容是否为三角形。在那里,您只需使用函数名称和参数列表。 (您需要检查纳税申报单,以了解是否有三角形)。因此,在获得printf float x = get_float("Length of the first side of the triangle: "); float y = get_float("Length of the second side of the triangle: "); float z = get_float("Length of the third side of the triangle: "); check_triangle()之后,您需要执行以下操作:

x

将其完全放在一起,您将:

y

要进行编译,请始终在启用了警告的情况下进行编译(对于gcc / clang z,我建议使用 if (check_triangle (x, y, z)) { puts ("\nyou have a triangle"); } else { puts ("\nnot a triangle"); } ),并且不要接受代码,直到代码在没有警告的情况下进行编译。如果您调用源文件#include <cs50.h> #include <stdio.h> bool check_triangle (float x, float y, float z) { if (x <= 0. || y <= 0. || z <= 0.) { return false; } if ( x + y <= z || x + z <= y || y + z <= x) { return false; } return true; } int main (void) { float x = get_float("Length of the first side of the triangle: "); float y = get_float("Length of the second side of the triangle: "); float z = get_float("Length of the third side of the triangle: "); if (check_triangle (x, y, z)) { puts ("\nyou have a triangle"); } else { puts ("\nnot a triangle"); } } ,则可以使用:

-Wall -Wextra -pedantic

然后,您应该能够测试您的代码。仔细研究一下,如果您还有其他问题,请告诉我。

答案 1 :(得分:0)

下面是我在代码中发现的一些错误

  1. }中的括号main丢失
  2. 在函数减速bool check_triangle(float x, float y, float z);中,不需要半冒号,并且缺少右括号{
  3. if中,条件应为if(your condition),而不是if{}
  4. x + <= y是错误的左值,缺少x+something <= y
  5. 遵循正确的格式以提高可读性。

请参见下面的代码,并对其进行更正。

  • 假设#include <cs50.h>get_float()您在照顾自己

     #include <cs50.h>
    
     #include <stdio.h>
    
     bool check_triangle(float x, float y, float z);
    
     int main(void)
     {
           float x, y, z;
    
           printf("what is the length of the first side of the triangle: \n");
           x = get_float();
           printf("what is the length of the second side of the triangle: \n");
           y = get_float();
           printf("what is the length of the third side of the triangle: \n");
           z = get_float();
    
           if(check_triangle(x,y,z))
           {
                 printf("Check triangle is success\n ");
           }
           else
           {
                 printf("Check triangle failed\n ");
           }
           return 0;
       }
    
       bool check_triangle(float x, float y, float z)    
       {     
             if(x <= 0 || y <= 0 || z <= 0)
             {
                  return false;
             }
             if( x + y <= z || x + z  <= y || y + z <= x)
             {
                  return false;
             }
             return true;
         }