0

私は現在、何らかの理由でクラッシュし続ける置換暗号を実装しようとしています。コードはかなり単純ですが、for ループまたはファイルからデータを読み込もうとしたときに発生すると思われる問題に遭遇し続けています。

cout << "Ener a key :";
cin >> key;

cin.ignore();
cout << endl << "Enter input file name: ";
getline(cin,fileIn);

inputfile.open(fileIn.c_str(), ios::in);


cout << endl << "Enter output file name: ";
getline(cin,fileOut);
outfile.open(fileOut.c_str(), ios::app);

cout << endl << "[E]ncryption or [D]ecryption? :";
cin >> EorD;


//Encryption
if (EorD == "E" || "e")
{
    while(!inputfile.eof()) // Reading in file data, while not end of file.
    {
        getline(inputfile,plainText);
    }

        for (int i = 0; i <= plainText.length(); i++)
        {
        char letter = plainText.at(i);
        int val = (int)letter; // getting ascii value of each letter.
        int EnVal = (val - 32) + key;
            if(EnVal > 95)
            {
                EnVal = (EnVal - 95) + 32;

            }
        char EnLetter = static_cast<char>(EnVal);
        outfile <<  EnLetter;
4

2 に答える 2

2

文字列内で 1 つのインデックスをループしすぎていplainTextます。エントリがlength()あり、最初0のインデックスが であるため、最後のインデックスはlength()-1です。これを試して:

for (int i = 0; i < plainText.length(); i++)

そうしないと、大きすぎるplainText.at(i)とクラッシュします。i

于 2013-05-01T13:38:06.980 に答える