Код файла ввода-вывода несовместим - PullRequest
1 голос
/ 13 марта 2012

Вывод из моей функции противоречив. Предполагается, что функция открывает файл, затем извлекает целые числа из файла и затем устанавливает целые числа в массив. У меня проблемы с извлечением из файла в массив, если есть 20 целых чисел. Когда я пытаюсь это сделать, я вижу, что «массив находится за пределами».

Предполагается, что эта функция также запрашивает подсказки, если имя файла неверное или если в его контексте нет целого числа. Кажется, что оба они работают правильно.

Любая помощь будет принята с благодарностью.

bool loadArrayFromFile(int a[], int &n)
{
 ifstream infile;
 string fileName;
 cout<<"Enter the name of file: ";
 cin>>fileName;
 infile.open(fileName.c_str());
 if(!infile)
{
  cout<<"File didn't open"<<endl; //if file name is incorrect or could not be opened
  return false;
}
int count=0; //count values in file
int elem=0; //keeps track of elements
infile>>a[elem];
while(infile.good())
{
  elem++;
  count++;
  infile>>a[elem];
}
if(!infile.eof())
{
  cout<<"Wrong datatype in file"<<endl;
  infile.clear();
  infile.close();
  return false;
}
n=count;
infile.close();
return true;
}

1 Ответ

1 голос
/ 13 марта 2012

Ваше описание проблемы звучит так, как будто вы даете массив, в котором слишком мало элементов.Возможно, вы захотите использовать std::vector<int> и прочитать элементы в ths, например,

std::vector<int> array;
array.assign(std::istream_iterator<int>(infile), std::istream_iterator<int>());
...