C语言嵌套IF-ELSE语句编译错误排查及问题解析
解决「error: expected declaration or statement at the end of input」错误及深入解析
错误本质
这个编译错误的核心原因是代码的大括号({})不匹配。C语言是结构化编程语言,编译器会严格检查代码块的开闭结构,当它读到文件末尾时,发现还有未闭合的代码块(比如函数主体、if/else分支块),就会抛出这个错误。
你的代码问题定位
看你提供的代码,问题出在main函数的右大括号缺失,同时嵌套if-else结构存在逻辑漏洞:
- 你在
return 0;之后只闭合了最外层else的},但main函数开头的{没有对应的闭合} - 最后一个分支(当
per < 1时)没有任何处理逻辑,属于逻辑遗漏,但不影响编译
修正后的代码
#include<stdio.h> int main() { float Math, English, Science, Fundamentals, per; printf("Enter GPA of 4 subject\n"); scanf("%f %f %f %f", &Math, &English, &Science, &Fundamentals); per = (Math + English + Science + Fundamentals) / 4.0; // 优化嵌套结构为else if,提升可读性 if(per >= 5) { printf("Your GWA is: 75\n"); } else if(per >= 3) { printf("Your GWA is: 75\n"); } else if(per >= 2) { printf("Your GWA is: 85\n"); } else if(per >= 1) { printf("Your GWA is: 100\n"); } else { printf("Your GWA is: Invalid GPA\n"); } return 0; } // 补上main函数的闭合大括号
该错误的常见触发场景
- 大括号遗漏:写函数、if/else、for/while循环时,只写了开括号
{,忘记写闭括号} - 大括号错位:把某个闭括号
}放错位置,导致代码块提前闭合,后续代码属于未闭合的结构 - 多行注释错误:多行注释
/* ... */没有正确闭合,编译器会把注释后面的代码当成注释内容,破坏整体代码结构
内容的提问来源于stack exchange,提问作者sussy cat
相关产品推荐
相关产品推荐

