-3

これは、私が持っているプログラミング割り当てのコードです。プログラムを実行すると、このエラーが発生します。この権利を理解していれば、このエラーは、アレイが割り当てられたメモリ空間を超えたことを意味します。あれは正しいですか?これが正しい場合、私は何を間違っていますか? 入力ファイルに含まれる要素が 30 未満です。

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cmath>
#include <sstream>
#include <cctype>
 using namespace std;

struct Element
{
string Name;
char eN1;
char eN2;
float Weight;
};

struct Formula
{
char Element1;
char ElementA;
int Atom;
 };

void ELEMENTS(Element ElmAry[30]);
float Str2Float(string Weight);
void FORMULAS(Formula FormAry[30]);
float CalculateMoleculeWeight(Element ElmAry[30], Formula FormAry[30]);

int main()
{
ifstream inputFile1;
ifstream inputFile2;
ofstream outputFile;

inputFile1.open("Element.txt");
inputFile2.open("Formula.txt");
outputFile.open("Molecular Weight.txt");

Element ElmAry[30];
Formula FormAry[30];
char inputCh;
int i = 0;
string String1;
string mFor;
string ABRV;
int ElmDigit = 0;
float StringWeight = 0;
string Name;
string Weight;
int LENGTH = 0;
float MOLEWT;


if(!inputFile1)
{
    cout << "Couldn't find the Element.txt file." << endl;
    return 0;
}

if(!inputFile2)
{
    cout << "Couldn't find the Formula.txt file." << endl;
    return 0;
}

ELEMENTS(ElmAry);

while(inputFile1)
{
    Name = String1.substr(0,2);
    ElmAry[i].Name = Name;

    Weight = String1.substr(3,10);
    String1.clear();
    StringWeight = Str2Float(Weight);
    ElmAry[i].Weight = StringWeight;
    i++;
}
i--;

FORMULAS(FormAry);

while (inputFile2)
{
    getline(inputFile2,String1);
    LENGTH = String1.length();
    int j = 0;
    int n = 0;
    while( j < LENGTH)
    {
        int pos = 0;
        pos = String1.find(')');
        while(n < LENGTH)
        {
            inputCh = String1.at(n);
            if(isalpha(inputCh) && isupper(inputCh))
            {
                FormAry[j].Element1 = String1.at(n);
                n++;
                inputCh = String1.at(n);
            }

            if(isalpha(inputCh) && islower(inputCh))
            {
                FormAry[j].ElementA = String1.at(n);
                n++;
                inputCh = String1.at(n);
            }

            if(ispunct(inputCh))
            {
                n++;
                inputCh = String1.at(n);
                ElmDigit = (inputCh-'0');
            }

            if(isdigit(inputCh))
            {
                FormAry[j].Atom = ElmDigit;
                n++;
            }
            inputCh = String1.at(n);

            j++;

            if(iscntrl(inputCh))
            {
                n++;
                inputCh = String1.at(n);
                j++;
            }
            n++;
        }
    }
}

MOLEWT = CalculateMoleculeWeight(ElmAry, FormAry);

cout << "\t\t MOLECULAR WEIGHT CHART \t\t\n" << endl;
cout << "\n| FORMULA |\t " << "\t| ATOM.WT |" << endl;
cout << "_______________________________";
outputFile << "\t\t MOLECULAR WEIGHT CHART \t\t\n" << endl;
outputFile << "\n| FORMULA |\t " << "\t| ATOM.WT |" << endl;
outputFile << "_______________________________";

for (int a = 0; a < 30; a++)
{
    cout << MOLEWT << endl;
    outputFile << MOLEWT << endl;
}

inputFile1.close();
inputFile2.close();
outputFile.close();
cin.get();
cin.get();
return 0;
}

void ELEMENTS(Element ElmAry[30])
{
for(int i = 0; i < 30; i++)
{
    ElmAry[i].Weight = 0;
}
}

void FORMULAS(Formula FormAry[30])

{
for(int x = 0; x < 30; x++)
{
    for(int x = 0; x < 9; x++)
    {
        FormAry[x].Atom = 1;
    }
}

}

float Str2Float (string x)
{
    stringstream ss(x);
    float StringWeight;
    ss >> StringWeight;
    return StringWeight;
}

float CalculateMoleculeWeight(Element ElmAry[30], Formula FormAry[30])
{
int i;
int j=0;
float MoleWT = 0;
float MoleSum = 0;
char e1;
char e2;
char f1;
char f2;

    for(i = 0; i < 30; i++)
    {
        f1 = FormAry[j].Element1;
        f2 = FormAry[j].ElementA;
        e1 = ElmAry[i].eN1;
        e2 = ElmAry[i].eN1;
        if
            (e1 == f1 && e2 == f2)
    {
        MoleWT = ElmAry[i].Weight * FormAry[j].Atom;
        MoleSum = MoleSum + MoleWT;
        j++;
    }
}
return MoleSum;
}

にたどり着いたとき

 while(inputFile1)
 {
    Name = String1.substr(0,2);
    ElmAry[i].Name = Name;

    Weight = String1.substr(3,10);//invalid string position
    String1.clear();
    StringWeight = Str2Float(Weight);
    ElmAry[i].Weight = StringWeight;
    i++;
}
i--;

重量 = String1.substr(3,10); 無効な文字列位置を教えてくれます

4

1 に答える 1