2015-05-08 2 views
1

Я пытаюсь использовать эту функциюifstream getline строки в массив?

int input(int marks[classMax][3], string names[classMax], float& avg) 
{ 
    for (int i = 0; i < students; i++) 
    { 
     for (int j = 0; j < 3; j++) 
     { 
      fin >> marks[i][j]; 
     } 
     fin >> names[i]; 
    } 
} 

, чтобы получить список марок с именами студентов в двух массивах. Список выглядит следующим образом: M1 M2 M3 FirstName LastName, где M означает Mark. цикл работает нормально, но когда он достигает места между Первым и Фамильным, программа, похоже, записывает только первое имя в массив. Я попытался с помощью fin.get и fin.getline(), но я получаю эту ошибку:

error: no matching function for call to 'std::basic_ifstream<char>::get(std::strings&, int)' 

ответ

2

Вы можете попробовать это:

int input(int marks[classMax][3], string names[classMax], float& avg) 
{ 
    for (int i = 0; i<students; i++) 
    { 
     for (int j = 0; j<3; j++) 
     { 
      fin >> marks[i][j]; 
     } 
     std::getline(fin, names[i]); 
    } 
} 

Для получения дополнительной информации ознакомьтесь с cppreference.

1

std::basic_istream::getline не принимает std::string.

std::getline - это то, что вы хотите использовать с std::string. Поскольку это шаблон функции, не являющийся членом, вызовите его с входным потоком в качестве первого параметра, а выходную строку - в секундах:

std::getline(fin, names[i]); 
Смежные вопросы