我正在努力使代码检查用户输入是否介于(和包括)10和100之间。
如此习惯于单一输入,我遇到麻烦,因为它是一个数组...
int main()
{
int numlist[20];
for(int i = 0; i < 20; i++)
{
cout << "Enter # " << i + 1 << " : ";
// here is where I am going wrong...
if ((numlist[i] <= 100) && (numlist[i] >= 10))
{
cin >> numlist[i];
}
}
}
答案 0 :(得分:6)
你不应该在测试cin >> numlist[i]
之前输入输入语句if ((numlist[i] <= 100) && (numlist[i] >= 10))
吗?
答案 1 :(得分:2)
看起来你想做这样的事情:
int temp = 0;
for (int i = 0; i < 20; i++)
{
cin >> temp;
if ((temp <= 100) && (temp >= 10))
numlist[i] = temp;
}
答案 2 :(得分:2)
只是提供一种稍微不同的方式,您可以考虑使用vector
而不是数组,并使用istream_iterator
和标准算法读取数据:
std::vector<int> numlist;
std::remove_copy_if(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(numlist),
[](int i)->bool { return i<10 || i > 100; });
编辑:我想因为我正在使用C ++ 11 lambda,所以我也可以使用C ++ 11 copy_if
,它更直接地表达了意图:
std::copy_if(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(numlist),
[](int i)->bool { return i>=10 && i<=100; });
就“聪明”而言,这根本不是意图 - 相反,所需要的是对原始意图的简单直接表达:将标准输入中的(过滤的)数据复制到容器中。它需要一点时间来习惯将文件视为容器的想法(尤其是像std::cin
这样的通常是交互式的),但最终文件是一个序列,istream_iterator / ostream_iterator让你像对待它们一样其他序列。
答案 3 :(得分:0)
正如其他人所说,你无法检查你甚至没有读过的值(来自用户)。 要约束输入,必须在do while循环内检查cin之后的输入,只要它不满足约束。
do
{
//you might cout here
cin >> numlist[i];
}
while ((numlist[i] > 100) || (numlist[i] < 10));