ACM编程:菜鸟筛选法错误详解

需积分: 50 3 下载量 17 浏览量 更新于2024-08-20 收藏 517KB PPT 举报
"为什么受伤的总是我-c语言筛选法" 这篇资源主要讲解的是ACM程序设计中的经典错误,特别是针对C语言的新手程序员所遇到的问题。主题围绕着筛选法(Selection Method),并列举了几个菜鸟程序员常犯的错误,帮助他们理解和避免这些问题。 1. **筛选法**:在ACM竞赛编程中,筛选法通常指的是处理输入数据的一种策略,比如读取多组输入数据时,使用某种方法来判断何时停止读取。在示例中并未详细解释筛选法的具体实现,但可以通过例子看出,它是用来处理不止一组输入数据的情况。 2. **处理多组数据**:文章指出,新手常犯的错误是无法正确处理程序接收多组输入数据的情况。例如,代码可能只能处理一组数据,然后就结束运行,而忽略了后续的输入。 3. **错误案例1**:展示了最基础的错误,即程序仅处理了一组输入。代码`scanf("%d%d", &a, &b); printf("%d\n", a + b);`在读取两整数后直接输出和,没有考虑可能存在的更多输入。 4. **错误案例2**:使用`while(scanf("%d%d", &a, &b) != 0)`可能导致死循环,因为EOF(文件结束符)的值不是0,而是-1,这样会导致TLE(Time Limit Exceeded)错误,意味着程序运行超时。 5. **错误案例3**:在`while`循环条件后面误加了分号,导致循环体实际上并未执行,这是菜鸟常犯的低级错误,虽然编译无误,但在运行时不会达到预期效果。 6. **错误案例4**:可能在使用`while`或`for`循环处理多组数据时,由于之前习惯性的分号,导致循环条件未被正确执行,需要特别注意移除多余的分号。 7. **解决方法**:对于处理多组数据,正确的做法是检查输入是否到达EOF,例如`while(scanf("%d%d", &a, &b) != EOF)`,确保在文件结束时停止读取。同时,要避免在循环条件后面添加分号。 8. **学习提醒**:无论是新手还是经验丰富的程序员,都应该时刻警惕这些容易忽视的错误,并且在编程实践中不断巩固对基本概念的理解,如文件结束符EOF的含义以及循环结构的正确使用。 通过这些例子,我们可以理解到,ACM编程中对于数据处理的严谨性和对基本语法的掌握是至关重要的。学习者应该通过不断地实践和反思,提升自己的编程技能,避免成为“受伤”的那一个。