首先,如果存在语法错误,则只需要仔细阅读编译器错误即可。通常,一行被突出显示为错误,但实际上是前一行存在错误。
请注意,对于入门学生而言,可能存在一些编辑工件,这些工件会阻止程序无法被编译。例如,我曾经看到一个学生(不是我的一个学生)使用空格键而不是返回:他的代码在编辑器上看起来很正常,该编辑器包裹了80列(该学生非常耐心),并且该代码甚至可以工作直到他添加“ //
”样式的注释,它注释掉了程序的所有其余部分。同样,如果您从网站上复制代码示例,通常还会复制一些不可打印的字符(取决于网站格式化代码的方式)。如有疑问,请在一行中重新键入而不进行复制和粘贴。[这真是太神奇了,但我最近看到了它的发生。]
对于讨厌的编译器错误,您可能必须通过创建新文件并在执行过程中键入所有代码来扩展程序。确保在每个主要步骤之后进行编译,然后再继续进行下一个步骤。
好的,如果没有语法错误怎么办?然后是时候逐步执行代码了!您可以为此使用调试器,但是对printf
整个代码进行调用也是非常有效的。例如,如果存在for
循环,则为循环计数器添加打印语句。对于嵌套for
循环,您可能会发现错误的变量正在递增。
使用printf
s 的优点是它可以随时间/空间“压缩”您当前正在查看的内容。当您使用调试器进行调试时,您还会看到很多不相关的状态,这可能会更加乏味。另外,在看不到已打印到控制台的内容的历史记录的情况下,您可能会错过一些模式。这里的要点是,调试器和printfs是互补的技术,两者都不总是比对方更好。
最后,只需问你的朋友发生了什么事!而不是看着它说“呃”,而是问他们他们在做什么:“现在做n
什么?” 通过启动对话框,他们可能最终会回答自己的问题,或者您可能意识到他们将程序概念化的方式存在缺陷,这可能会导致您找到解决方案。
正如其他地方所评论的那样,所有这些都随着经验的发展而变得更好。即使我已经编程了20年,但直到最近5年我一直在与学生一起工作,我才能更好地帮助他们解决错误。