我是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);
}
打开和关闭{ }
时需要注意。他们负责定义变量和函数的范围。再看一下功能范围。有一个很好的代码! :)
/*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);
}
}
简短的回答:你的主要问题是在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);
}
}
最后一点:请记住,您只是检查输入是否小于或等于某个数字。你没有检查它确实是一个数字,或者它不是负数,这两个都是防止程序崩溃的良好行为。
您收到此错误的原因是:
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中,if
和while
块的正确语法是
// very simplified version of the grammer
if(condition)
statement-block;
while(condition)
statement-block;
statement-block can be one of this:
- ;
- { statement1; statement2; ... }
- statement
一般来说,在if
和while
之后你只能有一个陈述。如果你需要更多,那么你必须用花括号{ statement1; statement2; .. }
包裹它们
有些情况下你只看到一个冒号;
:
// these are the same
if(condition);
if(condition)
{
}
请注意,代码的缩进与C无关。分号qazxsw poi是告诉语句appart的内容。这两个程序是等价的。
;