【发布时间】:2014-04-25 03:31:17
【问题描述】:
我正在尝试使其无法输入低于 0 的字母或数字。但是如果我输入一个字母,我会得到一个无限循环。
这就是我现在拥有的
int DiskCylCur [DiskDevices];
for (int i = 1; i<=DiskDevices; i++)
{
int input = 0;
cout << "Enter the number of Cylenders for Disk " << i << " : ";
cin >> input;
DiskCylCur[i] = input;
}
为什么会这样?
【问题讨论】:
-
你应该使用stringstream。
-
C++ 中的数组是从零开始的,仅供参考。您不应该填充从
1到DiskDevices的元素,因为DiskCylCur[DiskDevices]会踩到最后一个索引的内存,因为它超出了范围。 -
这里不能存在无限循环(如果我们不考虑由于@Cyber 提到的越界访问而导致的未定义行为),因为输入未在循环的控制块,您没有向我们展示完整的代码,我怀疑其他地方正在发生某些事情。请提供可重现的测试用例。
-
尝试先阅读这篇文章。 parashift.com/c++-faq/istream-and-ignore.html 在您的示例中,我看不到任何无限循环的可能性,但该链接应该有助于回答您有关忽略不需要的输入的问题。
-
对于小于零的问题,只需使用
unsigned。