2014-10-29 207 views
0

嗨我有一个未知问题getline()。我的程序应该提示提示,然后getline()应该在用户输入中读取,但由于某种原因,每次运行时都会提示并跳到下一个提示,而不允许我输入任何内容。我会发布代码,希望你们可以提供一些建议。getline()不按预期工作

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

    int quizzes = 0; 
    quizzes = getQuizzes(quizzes); 

    string studentArray[50]; 
    int* quizArray = new int[quizzes]; 
    double* studentAverage = new double[students]; 
    string studentName = ""; 
    for(int i = 0; i < students; i++) 
    { 
     cout << "Enter the students name: "; 
     getline(cin, studentName); 
     studentArray[i] = studentName; 
     cout << studentName; 

     for(int j = 0; j < quizzes; j++) 
     { 
      cout << "Enter quiz " << j+1 << ":"; 
      cin >> quizArray[j]; 
     } 
     studentAverage[i] = calculateAvergage(quizArray,quizzes); 
     cout << studentArray[i]; 
     cout << studentName; 
    } 
    cout << endl; 
    cout << "Student    Quiz Average" << endl << endl; 
    cout << "---------------------------------" << endl << endl; 


    for(int i = 0; i < students; i++) 
    { 
     cout << studentArray[i]; 
     cout << setw(10) << studentAverage[i] << endl << endl; 
    } 
} 
int getStudents(int students) 
{ 
    cout << "How many students? "; 
    cin >> students; 
    cout << endl; 
    if(students > 50) 
    { 
     cout << "Invalid number of students, enter a number less than 50: "; 
     cin >> students; 
     cout << endl; 
    } 
    return students; 
} 
int getQuizzes(int quizzes) 
{ 
    cout << "How many quizzes? "; 
    cin >> quizzes; 
    cout << endl; 
    if(quizzes > 10) 
    { 
     cout << "Invalid number of quizzes, enter a number less than 10: "; 
     cin >> quizzes; 
     cout << endl; 
    } 
    return quizzes; 
} 
double calculateAvergage(int quiz_array[],int num_quizzes) 
{ 
    double average = 0; 
    for(int i = 0; i < num_quizzes; i++) 
    { 
     average = quiz_array[i] + average; 
    } 
    average = (average/num_quizzes); 
    return average; 
} 
+0

'cin'可能处于失败状态,**发布完整示例**。 – user657267 2014-10-29 00:33:28

+0

根据请求发布整个程序 – user3558697 2014-10-29 00:36:08

+0

[C++ getline方法不工作]可能的重复(http://stackoverflow.com/questions/19257205/c-getline-method-not-working) – 2014-10-29 00:37:12

回答

0

从流读取单个值这样

cin >> quizzes; 

不消耗行字符的后端(或试图读取quizzes后剩下的任何其他无效字符),所以下一次拨打getline将继续从相同的输入行读取(通常您会预计该行在阅读quizzes后为空,因此getline最终不会读取任何内容)。

你的程序工作,如果使用下面的阅读quizzes之后:以同样的方式

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

或者你可以简单地读取studentName为其他值

std::cin >> studentName; 

与所有来电operator>>这将删除包括换行符在内的所有主要空白。