Когда я запускаю эту программу, цикл делает то, что он должен делать, но также по какой-то причине завершает программу, в необычный способ. Что здесь не так?Завершить вызов после экземпляра 'std :: out_of_range' what(): basic_string :: compare C++
Это файл данных открывает:
Peter Y Y N Y Y N
Sarah Y Y Y Y Y Y
Bongi Y Y Y N N N
Diane Y N Y N Y Y
Betty N Y Y Y Y N
Код:
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{
ifstream in_stream;
in_stream.open("answers.dat");
if (in_stream.fail())
{
cout<<"Input file opening failed"<<endl;
exit(1);
}
string line;
int q1,q2,q3,q4,q5,q6;
int prize_money;
int loop=0;
string array[20];
while (!in_stream.eof())
{
getline(in_stream,line);
array[loop]=line;
if ((line.compare(10,1,"Y")==0)&&(line.compare(14,1,"Y")==0))
{
if (line.compare(6,1,"Y")==0)
{
q1=1000;
}
else
{
q1=0;
}
if (line.compare(8,1,"Y")==0)
{
q2=2000;
}
else
{
q2=0;
}
if (line.compare(10,1,"Y")==0)
{
q3=3000;
}
else
{
q3=0;
}
if (line.compare(12,1,"Y")==0)
{
q4=4000;
}
else
{
q4=0;
}
if (line.compare(14,1,"Y")==0)
{
q5=5000;
}
else
{
q5=0;
}
if (line.compare(16,1,"Y")==0)
{
q6=6000;
}
else
{
q6=0;
}
prize_money=q1+q2+q3+q4+q5+q6;
cout<<line.substr(0,5)<<" R"<<prize_money<<endl;
}
loop++;
}
cout<<"Test to see if program goes beyond the loop"<<endl;
in_stream.close();
return 0;
}
Когда я запускаю программу, она отображает победителей и правильно суммы, но появляется окна диалоговое окно, которое собирает больше информации и хочет закрыть программу. Как только я закрою это сообщение, на экране появится сообщение:
te rminate вызывается после экземпляра 'std :: out_of_range' what(): basic_string :: compare. Эта программа попросила Runtime прекратить необычным способом. Обратитесь в службу поддержки за дополнительной информацией.
Форматирование пожалуйста. И используйте отладчик ... – LogicStuff
Это та же проблема: http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong Вы не можете использовать 'eof' для проверки конца file ** before ** call 'getline' – Ari0nhh
Могу ли я также добавить, что' array [] 'и сохранение строк, прочитанных для всего времени выполнения, совершенно бессмысленно в этом коде. Его нужно устранить, а не только потому, что это бессмысленно. Он также лишен всех и всех пограничных проверок и может легко преуспеть в состоянии переполнения, что приводит к * неопределенному поведению *. – WhozCraig