2017-02-21 34 views
0

Я пытался работать над программой для класса, но по какой-то причине, когда я ввожу номер один для программы, она переходит к случаю 1, но затем она не работает, t позвольте мне ввести строку и вернется в меню. Ex) введите в 1 результат: Введите строку: 01. Добавляет номер, но игнорирует все, что не является числом. Если я использую обычный оператор cin, код будет отлично исполнен. Я не понимаю, почему это делается. Может ли кто-нибудь помочь?cin.getline() не работает с оператором switch

#include <iostream> 
#include <cctype> 

using namespace std; 

void firstChoice(char []); 

int main() 
{ 
    int choice; 
    int answer; 
    const int SIZE = 100; 
    char line[SIZE]; 


do 
{ 
    cout << "1. Adds numbers but ignores anything thats not a number." << endl; 
    cout << "2. Count the number of consonants in a string." << endl; 
    cout << "3. Counts the vowels in a string." << endl; 
    cout << "4. Counts whitespace characters in a string." << endl; 
    cout << "Enter a number to access that program or 0 to end it: "; 
    cin >> choice; 

    switch(choice) 
    { 
     case 1: 
      cout << "\nEnter a string: "; 
      cin.getline(line, SIZE); 
      firstChoice(line); 
      break; 

     case 2: 
      cout << "Enter a string: "; 
      cin.getline(line, SIZE); 
      break; 

     case 3: 
      cout << "Enter a string: "; 
      cin.getline(line, SIZE); 
      break; 

     case 4: 
      cout << "Enter a string: "; 
      cin.getline(line, SIZE); 
      break; 
    } 
} 
while(choice != 0); 
return 0; 
} 

void firstChoice(char line[]) 
{ 
int size2 = 0; 
int sum = 0; 

while(line[size2] != '\0') 
{ 
    if(isalpha(line[size2])) 
    { 
     line[size2] = 0; 
    } 
    sum += line[size2]; 

    size2++; 
} 
cout << sum; 
} 
+0

Не использовать массивы нагара, используйте зЬй :: строку. –

ответ

2

После этого заявления

cin >> choice; 

использования

#include <limits> 

//... 

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