Использование нескольких экземпляров getline в C ++ - PullRequest
0 голосов
/ 06 ноября 2010

Я работал над присваиванием класса для C ++, и мы должны получить входные данные из текстового файла и присвоить эти значения массиву ... один - строка, второй - int, а третий -double.

Мы были представлены только для массивов, и я пока ничего не знаю о указателях или связанных списках, или о чем-то более высоком, поэтому я чувствую, что я немного ограничен в своихопции.Я работал весь день, пытаясь найти способ получить входные данные из текстового файла и назначить его соответствующему массиву.Я пытался использовать getline для чтения входного файла и установки разделителя для разделения каждого фрагмента данных, но я получаю сообщение об ошибке, когда пытаюсь использовать его более одного раза.Из того, что я прочитал, это связано с тем, как я перегружаю функцию, но затрудняюсь ее решить.Каждое объяснение, которое я читал об этом, выходит за рамки моего нынешнего уровня знакомства.Сейчас я сосредоточен на этом фрагменте кода:

for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names.
    getline(inFile, nameAr[i], '*');

for (int i = 0; i < EMP_NUM; i++) // Input for hours.
    getline(inFile, hoursAr[i], '*');

for (int i=0; i < EMP_NUM; i++) // Input for hourly rate.
    getline(inFile, hrateAr[i], '*');

Я пытаюсь использовать getline три раза и записывать данные в три отдельных массива, а затем выполнить серию вычислений с ними позже ивывести их в другой текстовый файл.Первый экземпляр getline не производит никаких ошибок компилятора, но последние два делают.Я не совсем уверен в другом решении, чтобы поместить данные в мои массивы, поэтому я в растерянности.Любая помощь будет отличной!

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Если я правильно понимаю, у вас просто есть три значения в файле: строка, int и double. Я предполагаю, что они разделены пробелами.

Если это так, то вам не нужно std::getline(). Скорее используйте оператор извлечения:

std::ifstream file("input.txt");
std::string s;
if( ! (file >> s) ) {  // a single word extracted from the file
    // failure
}
int n;
// ...
0 голосов
/ 06 ноября 2010

1) Вместо трех разных итераций используйте только одну

2) Передать строковый объект в getline вместо указателей

string buf;
for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names.
{
    getline(inFile, buf, '*');
    nameAr[i] = buf;
    getline(inFile, buf, '*');  //assuming delimiter is again *
    hoursAr[i] = atoi(buf.c_str() );  //C way to doing it...however in c++ u have to use stringstreams....
    getline(inFile, buf);
    hrateAr[i] = atof(buf.c_str() );;
}
0 голосов
/ 06 ноября 2010

Что говорят об ошибках ?Вы уверены, что ошибка вызвана getline?Возможно, это не потому, что вызовы getline, а из-за нескольких объявлений i.

...