Dec 2, 2019 at 12:20am UTC
I am having problem with this run-time error coming up:
Unhandled exception at 0x7ADEE906 (ucrtbased.dll) in Project 11 FINAL RFID.exe: An invalid parameter was passed to a function that considers invalid parameters fatal.
the error shows up at: startTimeminutes = stod(startTimeVec[0]) * 60 +
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
vector<string> split(const string& target, const string& delimiter)
{
vector <string> toBeReturned;
size_t nextDelimiterIndex = target.find(delimiter, 0);
if (nextDelimiterIndex < target.size())
toBeReturned.push_back(target.substr(0, nextDelimiterIndex));
while (nextDelimiterIndex < target.size() - 1 &&
nextDelimiterIndex < target.find(delimiter, nextDelimiterIndex + 1))
{
toBeReturned.push_back(target.substr(nextDelimiterIndex + 1,
target.find(delimiter, nextDelimiterIndex + 1) - nextDelimiterIndex - 1));
nextDelimiterIndex =
target.find(delimiter, nextDelimiterIndex + 1);
}
return toBeReturned;
}
vector<vector<vector<string>>>
racersDataExtractor(const vector<string>&myFileLast9Lines)
{
vector<vector<vector<string>>>
toBeReturned;
for (size_t j = 0; j < 3; ++j)
{
toBeReturned.push_back(vector<vector<string>>());
for (size_t i = 0; i < 3; ++i)
toBeReturned[j].push_back(split(myFileLast9Lines[i + 3 * j], "," ));
if (j > 0)
{
vector<string> temp;
for (size_t k1 = 0; k1 < 3; ++k1)
{
for (size_t k2 = 0;
k2 < 3; ++k2)
{
if (toBeReturned[j][k1][1] == toBeReturned[j - 1][k2][1])
{
temp = toBeReturned[j][k1];
toBeReturned[j][k1] = toBeReturned[j][k2];
toBeReturned[j][k2] = temp;
}
}
}
}
}
return toBeReturned;
}
int main()
{
fstream myData("racersdata.txt" );
if (!myData)
{
cout << "I couldn't find your file" << endl;
system("pause" );
exit(1);
}
string myFileString;
char next;
while (myData.get(next))
myFileString += next;
string startTime = myFileString.substr(0, myFileString.find("\n" ));
string dataLines = myFileString.substr(myFileString.find("\n" ) + 1);
vector<string> dataLinesVect = split(dataLines, "\n" );
vector<vector<vector<string>>>
racersData = racersDataExtractor(dataLinesVect);
cout << "Enter the racer's ID:\t" ;
string racerID; cin >> racerID;
int racerNumber = -1;
for (size_t i = 0; i < 3; ++i)
if (racersData[0][i][1] == racerID)
racerNumber = i;
if (racerNumber < 0)
{
cout << "Invalid ID" << endl;
system("pause" );
exit(1);
}
double startTimeminutes = 0;
double secondTimeminutes = 0;
double thirdTimeminutes = 0;
vector<string> startTimeVec = split(racersData[0][racerNumber][2], "" );
vector<string> secondTimeVec = split(racersData[1][racerNumber][2], "" );
vector<string>thirdTimeVec = split(racersData[2][racerNumber][2], "" );
startTimeminutes = stod(startTimeVec[0]) * 60 +
stod(startTimeVec[1]) + stod(startTimeVec[2]) / 60;
secondTimeminutes = stod(secondTimeVec[0]) * 60 +
stod(secondTimeVec[1]) + stod(secondTimeVec[2]) / 60;
thirdTimeminutes = stod(thirdTimeVec[0]) * 60 +
stod(thirdTimeVec[0]) * 60 +
stod(thirdTimeVec[1]) + stod(thirdTimeVec[2]) / 60;
cout << "the racer's overall finish place is" << racersData[2][racerNumber][2]
<< "\n race split times in minutes/mile for split1 is " << (secondTimeminutes - startTimeminutes) / 7
<< "\n race split times in minutes/mile for split2 is " << (thirdTimeminutes - secondTimeminutes) / 6.1
<< "\n The overall race time (minutes) is " << (thirdTimeminutes - startTimeminutes)
<< "\n and overall race pace (minutes/miles) is " << (thirdTimeminutes - startTimeminutes) / 13.1
<< "." ;
return 0;
}
[/code]
Input file data:
08 00 00
0,100,08 00 00
0,132,08 00 03
0,182,08,00,15
1,100,08,50,46
1,182,08,51,15
1,132,08,51,18
2,132,09,34,16
2,100,09,35,10
2,182,09,45,15
Last edited on Dec 2, 2019 at 12:45am UTC
Dec 2, 2019 at 12:21am UTC
The run-time error I get is at line 100
Dec 2, 2019 at 12:45am UTC
Sorry I added to my original message, but it is the following data:
08 00 00
0,100,08 00 00
0,132,08 00 03
0,182,08,00,15
1,100,08,50,46
1,182,08,51,15
1,132,08,51,18
2,132,09,34,16
2,100,09,35,10
2,182,09,45,15
Dec 2, 2019 at 2:24am UTC
run your program through a debugger and watch your variables
you're passing an empty string to stod()
vector<string> startTimeVec = split(racersData[0][racerNumber][2], "" );
using 100 as racerID, that function is called like
split("08 00 00" , "" )
¿what is that supposed to return?
¿what is returning?