Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 相同的C++;代码在Windows上产生无限循环,在OSX上产生预期行为_C++_Windows_Macos_While Loop_Iostream - Fatal编程技术网

C++ 相同的C++;代码在Windows上产生无限循环,在OSX上产生预期行为

C++ 相同的C++;代码在Windows上产生无限循环,在OSX上产生预期行为,c++,windows,macos,while-loop,iostream,C++,Windows,Macos,While Loop,Iostream,这是我见过的最奇怪的事情之一。我在大学里教C++课程,我的一个学生跟我联系,说他的代码不停地运行。在课堂上,我简单地浏览了一下他的代码,并没有看到任何明显的东西,所以我让他给我发电子邮件 没有做任何修改,我下载了他的代码并在我的机器上运行——它运行得很好。我能看到的唯一区别是我使用的是OSX,而他使用的是Windows 代码如下: 有什么想法吗 解决方案:PEBKAC遵守 这个问题实际上与学生打字的内容有关。当提示输入存款时,我从未想过尝试输入字符串 顺便说一句,关于最近大学里对程序员“质量”的

这是我见过的最奇怪的事情之一。我在大学里教C++课程,我的一个学生跟我联系,说他的代码不停地运行。在课堂上,我简单地浏览了一下他的代码,并没有看到任何明显的东西,所以我让他给我发电子邮件

没有做任何修改,我下载了他的代码并在我的机器上运行——它运行得很好。我能看到的唯一区别是我使用的是OSX,而他使用的是Windows

代码如下:

有什么想法吗

解决方案:PEBKAC遵守 这个问题实际上与学生打字的内容有关。当提示输入存款时,我从未想过尝试输入字符串

顺便说一句,关于最近大学里对程序员“质量”的贬损评论:我不确定这是针对我还是针对我的学生,但我想简单地谈谈这两个观点

假设它是针对我的:我是本课程的助教,而不是主要讲师,我负责教授实验作业。所以,通过“教学C++课程”,我的意思是“在实验室作业中包含的教材”。至于我自己的背景和经历,我不得不承认我有点被忽视了。首先,我是一个人工智能研究者,在一个主要是理论(Read:Logic and Maple)的领域工作,在那里我不必编写C++代码。我把这个问题贴到Stack Overflow上的全部原因是因为我总是在这里找到有用的创造性解决方案。我心里想,“这里有一些奇怪的东西,我没有立即看到,但不用担心,所以上的人都知道了。”

所有这些都表明:我正在尽我所能帮助这些孩子学习材料,而且学得很好。这种态度对任何人都没有帮助


假设它是针对我的学生的:来吧,真的吗?他甚至都不是计算机科学专业的学生,而这项作业是从他上课的第三周开始的——这是他第三周的编程课。我不想在比赛这么早就让他气馁

未检查任何输入操作。有各种各样的线路,比如

cin >> deposit;
如果从stdin提取失败(即,在这种情况下,如果流中的下一个东西不是有效的
double
),则将在流上设置失败状态,并且在重置状态之前,来自stdin的后续输入操作将不会成功


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

未检查任何输入操作。有各种各样的线路,比如

cin >> deposit;
如果从stdin提取失败(即,在这种情况下,如果流中的下一个东西不是有效的
double
),则将在流上设置失败状态,并且在重置状态之前,来自stdin的后续输入操作将不会成功


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

在Visual Studio 2010 Professional上对我很好。就我所见,代码没有什么问题,只是他使用了getline(),运算符==。在cin中使用getline是错误的,他应该使用operator>>,然后看看是否效果更好。

在Visual Studio 2010 Professional上对我来说很好。就我所见,代码没有什么问题,只是他使用了getline(),运算符==。getline与cin一起使用是错误的,他应该使用operator>>,看看这是否更好。

至少,代码:

cout << setw(COL1) << "Do you want to enter another account? (Y/N) ";
getline(cin, cont);

cout至少,代码:

cout << setw(COL1) << "Do you want to enter another account? (Y/N) ";
getline(cin, cont);

cout我会假设这与他如何从控制台获取输入有关。

我会假设这与他如何从控制台获取输入有关。

+1,我没有注意到这一点,但如果你输入“fiftythree”作为押金,它将无限循环。事实证明,学生实际上是在做类似的事情。这就是我无法重现错误的确切原因——我甚至从未想过要输入字符串。+1,我没有注意到这一点,但如果你输入“fiftythree”作为押金,它将无限循环。事实证明,学生确实在做类似的事情。这就是我无法重现错误的确切原因——我甚至从未想过要输入字符串。那个学生应该学会在调试器中一步一步地检查代码,看看出了什么问题。我有一个非常恶劣的评论,关于为什么大学不能再培养出合格的程序员,但是我会保留它。那个学生应该学会在调试器中逐步检查代码,看看出了什么问题。我有一个非常讨厌的评论,关于为什么大学不能再培养出优秀的程序员,但我会保留它。请解释为什么
std::getline()
std::cin
一起使用是错误的。
std::getline
函数允许解析不同的类型和其他内容。因为如果你得到一行,它将不完全等于输入,它的末尾将有“\n”或“\r\n”。@Thomas在这方面是正确的,DeadMG,你错了
std::getline()
将返回无分隔符的行。请解释为什么
std::getline()
std::cin
一起使用是错误的。
std::getline
函数允许解析不同的类型和其他内容。因为如果你得到一行,它将不完全等于输入,它的末尾将有“\n”或“\r\n”。@Thomas在这方面是正确的,DeadMG,你错了
std::getline()
将返回无分隔符的行。