2014-10-28 3 views
0

У меня возникла путаница в том, как хранить строки в массиве. Цель программы состоит в том, чтобы взять с собой несколько учеников и несколько викторинов из консоли, а затем рассчитать среднее значение указанных оценок викторины на одного ученика, что достаточно просто. Хотя я сталкиваюсь с некоторыми проблемами, когда я пытаюсь принять имена студентов (1-10 строк, основанных на количестве студентов, которые мне дает пользователь). Единственный способ, с помощью которого я могу взять эти данные, - это использовать цикл for, поскольку количество имен, которые мне нужно прочитать, определяется вводом пользователей. Я хотел бы сохранить имена в массиве, но я не уверен, как это сделать. Любая помощь будет оценена по достоинству. Код ниже.Чтение строк с консоли и их хранение в массиве

int main() 
{ 
    int students = 0; 
    getStudents(students); 

    int quizzes = 0; 
    getQuizzes(quizzes); 

    char* studentArray = new char[students]; 
    int* quizArray = new int[quizzes]; 
    double* studentAverage = new double[students]; 

    char student_name[20]; 
    for(int i = 0; i < students; i++) 
    { 
     cout << "Enter the students name: "; 
     cin.get (student_name, 20); 
     cin.ignore(' ','\n'); 
     studentArray[i]=student_name; 
     for(int j = 0; j < quizzes; j++) 
     { 
      cout << "Enter quiz " << j+1 << ":"; 
      cin >> quizArray[j]; 
     } 
     studentAverage[i] = calculateAvergage(quizArray,quizzes); 
    } 

^основная программа. проблема возникает во внешнем for-loop. Я вынужден принимать имена внутри цикла, потому что я не могу знать, сколько имен потребуется до выполнения. Я также должен отображать имена позже в программе после завершения цикла, поэтому я не могу просто сделать простой cout < < внутри цикла.

for(int i = 0; i < students; i++) 
{ 
    cout << studentArray[i] << setw(10) << studentAverage[i] << endl << endl; 
} 

^цикл, который отображает данные в конце программы.

Я также добавить, что вывод должен выглядеть для небольшого осветления

How many students? 2 
How many quizzes? 3 

Enter the students name: John Smith 
Enter Quiz 1: 90 
Enter Quiz 2: 80 
Enter Quiz 3: 75 
Enter the students name: John Jones 
Enter Quiz 1: 100 
Enter Quiz 2: 90 
Enter Quiz 3: 80 

Student    Quiz Average 
--------------------------------- 
John Smith    81.67 
John Jones    90.00 

ответ

0
You can modify the below code to suit your needs. It takes a string and integer. 
#include <iostream> 
#include<vector> 
#include <string> 
int main() 
{ 
std::string name; 
int num; 
std::vector<std::string> stringList; 
std::vector<int> intList; 
while(std::cin >> name >> num) 
{ 
    //enter stop and 0 to stop 
    if (!name.compare("stop") && num == 0) break; 
    stringList.push_back(name); 
    intList.push_back(num); 

} 
std::copy(stringList.begin(), stringList.end(), std::ostream_iterator<std::string> (std::cout,",")); 
std::cout << std::endl; 
std::copy(intList.begin(), intList.end(), std::ostream_iterator<int>(std::cout ,",")); 
std::cout << std::endl; 
return 0; 
}