Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++_Constraints - Fatal编程技术网

C++ 如何为此代码创建检查?

C++ 如何为此代码创建检查?,c++,constraints,C++,Constraints,我试图让代码检查用户输入是否介于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 (

我试图让代码检查用户输入是否介于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];
        }
    }
}

如果numlist[i]=10,您不应该将输入语句cin>>numlist[i]放在测试之前吗?

如果numlist[i]=10,您不应该将输入语句cin>>numlist[i]放在测试之前吗?

看起来您想这样做:

int temp = 0;

for (int i = 0; i < 20; i++)
{
  cin >> temp;
  if ((temp <= 100) && (temp >= 10))
    numlist[i] = temp;
}

看起来您希望执行以下操作:

int temp = 0;

for (int i = 0; i < 20; i++)
{
  cin >> temp;
  if ((temp <= 100) && (temp >= 10))
    numlist[i] = temp;
}

只是给出一个稍微不同的方法,你可以考虑一个向量而不是一个数组,然后用ISTRAMAMI迭代器和标准算法读取数据:

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; });

就Smart而言,这根本不是目的——相反,我们需要的是原始目的的简单、直接表达:将过滤后的数据从标准输入复制到容器中。要习惯将文件视为容器的想法确实需要一点时间,特别是像std::cin这样的容器,它通常是交互式的,但最终文件是一个序列,而istream_iterator/ostream_iterator只是让您将其视为其他序列。

只是给出了一种稍微不同的方法,您可以考虑向量而不是数组,并用ISTRAMAMI-迭代器和标准算法读取数据:

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; });

就Smart而言,这根本不是目的——相反,我们需要的是原始目的的简单、直接表达:将过滤后的数据从标准输入复制到容器中。要习惯将文件视为容器的想法确实需要一点时间,特别是像std::cin这样的容器,它通常是交互式的,但最终文件是一个序列,而istream\u iterator/ostream\u iterator只是让您将其视为其他序列。

正如其他人所指出的,您甚至无法检查尚未从用户处读取的值。 要约束输入,必须在do while循环中检查cin之后的输入,只要它不满足约束

do
{
    //you might cout here
    cin >> numlist[i];
}
while ((numlist[i] > 100) || (numlist[i] < 10));

正如其他人所指出的,您甚至无法检查尚未从用户处读取的值。 要约束输入,必须在do while循环中检查cin之后的输入,只要它不满足约束

do
{
    //you might cout here
    cin >> numlist[i];
}
while ((numlist[i] > 100) || (numlist[i] < 10));

你可能还想在某个地方输入++i,但除此之外,我认为这与OP要求的fo最接近++i必须在这个循环之外,我只给出了一个代码来获取相同的输入,只要它不满足约束条件。你可能还想在某个地方输入++i,但除此之外,我认为这与OP要求的fo最接近++我必须在这个循环之外,我只给出了一个代码,只要它不满足约束,就可以接受相同的输入。。。但我只是想如果你想要一个过滤器,C++不是最好的语言来表达这个……聪明…但我认为如果你想要一个过滤器,C++不是最好的语言来表达这个…