我是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);
}
答案 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中,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不重要。分号;
是什么
告诉声明appart。这两个程序是等效的。
int main(void)
{
printf("Hello, ");
printf("world!\n");
return 0;
}
int main(void){printf("Hello, ");printf("world!\n");return 0;}