相同的C++代码导致Windows上的无限循环和OSX上的预期行为

Gle*_*iet 1 c++ windows macos iostream while-loop

这是我见过的最奇怪的事情之一.我正在一所大学教授一门C++入门课程,我的一位学生联系我说他的代码永远不停地运行.我在课堂上简短地浏览了他的代码,并没有立即看到任何明显的东西,所以我让他给我发了他的代码.

没有做任何更改,我下载并在我的机器上运行他的代码 - 它工作正常.我能看到的唯一区别是我正在使用OSX,而​​他正在使用Windows.

这是代码:http://pastie.textmate.org/private/9rzpttixnuhudsvsm1yl4q

有任何想法吗?

解决:PEBKAC Abides

这个问题实际上与学生输入的内容有关.在提示存款时尝试输入一个字符串,我从来没有想过.

顺便说一句,关于这些天大学程序员的"质量"的贬低评论:我不确定该评论是针对我还是针对我的学生,但我想简要介绍两种观点.

假设它是针对我的:我是课程的助教,而不是主讲师,我负责教授实验课程.因此,通过"教授C++入门课程",我的意思是"实验作业中涵盖的教材".关于我自己的背景和经验,我不得不承认我感到有些轻视.我首先是一名人工智能研究员,在一个主要是理论的领域工作(读:逻辑和数学),我不必编写C++代码.我将此问题发布到Stack Overflow 的全部原因是因为我总是在这里找到有用且有创意的解决方案.我心里想,"这里有一些奇怪的东西,我不会马上看到,但不要担心,SO上的人都有这个."

所有这一切:我正在尽我所能帮助这些孩子学习这些材料. 这种态度对任何事都没有帮助.

假设它是针对我的学生的:来吧,真的吗?他甚至不是一个CS专业,这个任务是由类的第三个星期-他的节目的第三个星期的任何一种,永远.我不想在游戏初期劝阻他.

Jam*_*lis 10

没有检查任何输入操作.有各种各样的线条

cin >> deposit;
Run Code Online (Sandbox Code Playgroud)

如果从stdin中提取失败(即,如果流中的下一个内容double在这种情况下不是有效的),那么将在流上设置失败状态,并且stdin的后续输入操作都不会成功,直到重置状态为止.

由于您只检查cont循环条件中的值而不测试流状态,因此如果设置了失败状态,程序可能会连续循环.

  • +1,我没有注意到这一点,但是如果输入"fivethree"进行存款,它将无限循环. (2认同)