0

std::cin を使用して大量の数値を配列に入力することにイライラする問題があります (ただし、それが cin であるか他のものであるかは気にしません)。たとえば、最大 100 万個の整数を整数配列に格納する必要があり、何らかの理由で 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

As a first step, add error checking, i.e. replace your current code

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

with e.g.

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

Disclaimer: off-the-cuff code, may need fix of typos.

于 2012-12-27T00:43:04.150 に答える