0

使用 std::cin 将大量数字输入到数组中时,我遇到了一个令人沮丧的问题(尽管我不在乎它是 cin 还是其他东西)。例如,我必须将多达一百万个整数存储到一个整数数组中,并且已经找到了一个解决方案,由于某种原因,该解决方案仅适用于 842-843 的第一个输入。

我目前的代码:

#include <iostream>

int main()
{

    size_t array_size;
    size_t sum;

    std::cin >> array_size; //let's say array_size = 10000

    int* _nums = new int[array_size];

    for(int i = 0; i < (int)array_size; i++)
    {
        //everything goes fine if I put something like 500 as the array_size
        std::cin >> _nums[i];
    }

    return 0;

}

谢谢你的帮助!

4

1 回答 1

0

作为第一步,添加错误检查,即替换您当前的代码

#include <iostream>

int main()
{
    size_t array_size;
    size_t sum;

    std::cin >> array_size; //let's say array_size = 10000

    int* _nums = new int[array_size];

    for(int i = 0; i < (int)array_size; i++)
    {
        //everything goes fine if I put something like 500 as the array_size
        std::cin >> _nums[i];
    }
    return 0;
}

与例如

#include <iostream>
#include <vector>        // std::vector
#include <stdexcept>     // std::runtime_error, std::exception
#include <stdlib.h>      // EXIT_FAILURE, EXIT_SUCCESS
#include <string>        // std::string

bool throwX( std::string const& s ) { throw std::runtime_error( s ); }

void cppMain()
{
    int array_size;

    std::cin >> array_size; //let's say array_size = 10000

    std::vector<int> nums( array_size );

    for( int i = 0; i < array_size; ++i )
    {
        //everything goes fine if I put something like 500 as the array_size
        std::cin >> _nums[i]
            || throwX( "Oops, input failed!" );
    }
}

int main()
{
    try
    {
        cppMain();
        return EXIT_SUCCESS;
    }
    catch( std::exception const& x )
    {
        cerr << "!" << x.what() << endl;
    }
    return EXIT_FAILURE;
}

免责声明:现成的代码,可能需要修复拼写错误。

于 2012-12-27T00:43:04.150 回答