预期标识符或'('之前'}令牌

时间:2018-01-22 02:28:02

标签: c

我是C的超级新手并且在最后一行不断收到此错误。我试过通过我的教科书和Google搜索并在这里查看。我认为这是一个小错误,但我似乎无法弄明白。

 /*Convert military time to standard time*/

#include <stdio.h>

int main (void)
{
    double MilitaryTime, StandardTime;
    printf("Enter a military time (0000 to 2359): \n");
    scanf("%f", &MilitaryTime);


    {
        if(MilitaryTime <= 2359)
        {
            if(MilitaryTime <= 1159)
            StandardTime = MilitaryTime/100;
            printf("The regular time is: %2f AM\n", StandardTime);
            else
            StandardTime = (MilitaryTime - 1200)/100;
            printf("The regular time is: %2f PM\n", StandardTime);
        }
        else 
        printf("Error: Please enter a number between 0000 and 2359: %f\n");
        scanf("%f", &MilitaryTime);
    }

3 个答案:

答案 0 :(得分:2)

打开和关闭{ }时需要注意。他们负责定义变量和函数的范围。再看一下功能范围。有一个很好的代码! :)

/*Convert military time to standard time*/

#include <stdio.h>

int main (void) {
  double MilitaryTime, StandardTime;
  printf("Enter a military time (0000 to 2359): \n");
  scanf("%f", &MilitaryTime);

  if(MilitaryTime <= 2359) {
      if(MilitaryTime <= 1159) {
        StandardTime = MilitaryTime/100;
        printf("The regular time is: %2f AM\n", StandardTime);
      } else {
        StandardTime = (MilitaryTime - 1200)/100;
        printf("The regular time is: %2f PM\n", StandardTime);
      }
  } else { 
    printf("Error: Please enter a number between 0000 and 2359: %f\n");
    scanf("%f", &MilitaryTime);
  }
}

答案 1 :(得分:1)

简短回答:您的主要问题是 if else 语句后缺少大括号{}。

更长的解释: 在C中,if语句必须后跟大括号,否则只能在评估后的第一行。如果使用else语句,则必须立即跟进if。

换句话说,你要做的是:

if CONDITION
do:
    LINE1
    LINE2
    LINE3
    ETC...
else
do:
    ELSE_LINE1
    ELSE_LINE2
    ELSE_LINE3
    ETC...

但是您告诉编译器的是

if CONDITION
do:
    LINE1
Do anyway:
LINE2
LINE3
ETC...

else //This part is not defined and therefor the compiler doesn't understand 
     //you, as else must follow up right after an if

更重要的是,您还有另外两个问题:

一,您使用%f格式扫描double类型的变量。 %f用于扫描浮动,而不是双打。因此,如果您想要使用双精度变量,则必须使用scanf("%lf", &MilitaryTime);

最后,您在第一个if语句之前打开了一段代码。虽然我没有看到这会导致您当前的代码出现问题,但我没有理由这样做,除非您有特定的内容,否则我会删除它。

所以,你的固定代码是:

/*Convert military time to standard time*/
#include <stdio.h>

int main (void)
{
double MilitaryTime, StandardTime;
printf("Enter a military time (0000 to 2359): \n");
scanf("%lf", &MilitaryTime);

if(MilitaryTime <= 2359)
    {
        if(MilitaryTime <= 1159)
        {
            StandardTime = MilitaryTime/100;
            printf("The regular time is: %2f AM\n", StandardTime);
        }

        else
        {
            StandardTime = (MilitaryTime - 1200)/100;
            printf("The regular time is: %2f PM\n", StandardTime);
        }

    }
        else
        {
            printf("Error: Please enter a number between 0000 and 2359: %f\n");
            scanf("%f", &MilitaryTime);
        }
}

最后一点:请记住,您只是检查输入是否小于或等于某个数字。你没有检查它确实是一个数字,或者它不是负数,这两种方法都是防止你的程序崩溃的良好行为。

答案 2 :(得分:0)

您因以下原因而收到此错误:

if(MilitaryTime <= 1159)
    StandardTime = MilitaryTime/100;
    printf("The regular time is: %2f AM\n", StandardTime);
else
...

请注意,C中的缩进没有意义(例如在Python中)。

您的代码等同于:

if(MilitaryTime <= 1159)
{
    StandardTime = MilitaryTime/100;
}
    printf("The regular time is: %2f AM\n", StandardTime);
else
...

正如您所看到的,printf位于if块后面,用于编译器 这是整个if块的结束,然后它会看到else没有 上一个if,这是语法错误。

正确的代码是:

if(MilitaryTime <= 1159)
{
    StandardTime = MilitaryTime/100;
    printf("The regular time is: %2f AM\n", StandardTime);
} else {
    StandardTime = (MilitaryTime - 1200)/100;
    printf("The regular time is: %2f PM\n", StandardTime);
}

修改

请注意,在C中,ifwhile块的正确语法是

// very simplified version of the grammer

if(condition)
    statement-block;

while(condition)
    statement-block;

statement-block can be one of this:

 - ;

 - { statement1; statement2; ... }

 - statement

一般来说,在ifwhile之后,您只能拥有一个陈述。如果 你需要更多,然后你必须用花括号包裹它们 { statement1; statement2; .. }

在某些情况下,您只能看到冒号;

// these are the same
if(condition);

if(condition)
{
}

请注意,代码的标识对C不重要。分号;是什么 告诉声明appart。这两个程序是等效的。

int main(void)
{
    printf("Hello, ");
    printf("world!\n");
    return 0;
}

int main(void){printf("Hello, ");printf("world!\n");return 0;}