2017-02-21 2 views
0

J'ai essayé de travailler sur un programme pour la classe, mais pour une raison quelconque, lorsque je saisis le numéro un pour le programme, il va au cas 1, mais il doesn ' t laissez-moi entrer une chaîne et retourne directement au menu. Ex) entrez 1 le résultat est: Entrez une chaîne: 01. Ajoute un nombre mais ignore tout ce qui n'est pas un nombre. Si j'utilise une instruction cin ordinaire, le code s'exécutera parfaitement bien. Je ne comprends pas pourquoi c'est ce qu'il fait. Quelqu'un peut-il aider?cin.getline() ne fonctionne pas avec l'instruction 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

Ne pas utiliser les tableaux de CHAR, utilisez std :: string. –

Répondre

2

Après cette déclaration

cin >> choice; 

utilisation

#include <limits> 

//... 

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