-2

このプログラムは、読みやすくするために短縮されています。変数の量に応じて、より多くのケース ステートメントが存在することは明らかです。私の質問は、プログラムを実行するたびにエラーが発生するのはなぜですか。コンパイル時は問題ありませんが、実行時は問題ありません。

#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
using namespace std;

int main()
{
    string thearray[22960];
    char bigfor[10];
    int arrayvar = 0;
    int finishedarray;
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    int g;
    int h;
    int i;
    int j;

    // Constants

    int variable1 = 0;
    int variable2 = 1;
    int variable3 = 2;
    int variable4 = 3;
    int variable5 = 4;
    int variable6 = 5;
    int variable7 = 6;
    int variable8 = 7;
    int variable9 = 8;
    int variable10 = 9;




    for (a = 0; a < 36; a++)
    {
        switch (a)

        {
        case 0:
            bigfor[variable1] = '0';
            break;
        case 1:
            bigfor[variable1] = '1';
            break;
        case 2:
            bigfor[variable1] = '2';
            break;
        case 3:
            bigfor[variable1] = '3';
            break;
        case 4:
            bigfor[variable1] = '4';
            break;
        case 5:
            bigfor[variable1] = '5';
            break;
        case 6:
            bigfor[variable1] = '6';
            break;
        case 7:
            bigfor[variable1] = '7';
            break;
        case 8:
            bigfor[variable1] = '8';
            break;
        case 9:
            bigfor[variable1] = '9';
            break;
        }

        thearray[arrayvar] = bigfor[variable1] + bigfor[variable2] + bigfor[variable4] +
                             bigfor[variable5] + bigfor[variable6] + bigfor[variable7] + 
                             bigfor[variable8] + bigfor[variable9] + bigfor[variable10];


        arrayvar = arrayvar + 1;
    }

    finishedarray = arrayvar + 1;
    ofstream myfile;
    myfile.open("codes.txt");

    for (arrayvar = 0; a < finishedarray; a++)
    {
        myfile << thearray[arrayvar] << endl;
    }

    myfile.close();
    return 0;
}
4

2 に答える 2

2

1 つの問題は、ここで初期化されていない値を読み取っていることです。

thearray[arrayvar] = bigfor[variable1]+ bigfor[variable2] + bigfor[variable4] +
bigfor[variable5] + bigfor[variable6] + bigfor[variable7] + bigfor[variable8] + 
bigfor[variable9] + bigfor[variable10];

これは未定義の動作です。プログラムのこの時点で、のみbigfor[variable1]が初期化されます。

何をしようとしても、もっと簡単な方法があると思います。

于 2013-07-15T17:14:20.063 に答える
1

問題は、あなたが行っていた追加でした。この追加は、ASCII 文字の整数エンコード値のみを追加し、結果は整数になります。に整数を代入できないため、これによりエラーが発生しますstd::string

@juanchopanza の回答に加えて、コードを大幅に改善できます。たとえば、インデックスを手動でリストする代わりに、代わりに for ループ内でこれを行うことができます。

std::string bigfor;

for (int a = 0; a < 36; ++a)
{
    bigfor += (a + 48);
}

std::ofstream myfile("codes.txt");

for (int i = 0; i < bigfor.size(); ++i)
{
    myfile << bigfor[i] << std::endl;
}
于 2013-07-15T17:23:54.010 に答える