2016-11-03 3 views
0

Моя программа продолжает сбой при каждом вводе ввода, хотя я использую метод системной паузы и отображает то же самое количество гласных и согласных, что неверно. Что происходит?Подсчет гласных и согласных

int main() { 
    // declare vars 
    char ch; 
    int vowels = 0; 
    int consonants = 0; 
    string word = "temp"; 

    // prompt user 
    cout << "Please enter a word: "; 
    cin >> ch; 

    // loop vowels and consonants 
    for (int i = 0; i < word.size(); i++) { 
     ch = toupper(word[i]); 
     switch (ch) { 
     case 'A': 
     case 'E': 
     case 'I': 
     case 'O': 
     case 'U': 
      vowels++; 
      break; 
     default: 
      consonants++; 
     } 
    } 

    // show num of vowels and consanants 
    cout << "Number of Vowels: " << vowels << endl; 
    cout << "Number of Consanants: " << consonants << endl; 

    // pause and exit 
    getchar(); 
    getchar(); 
    return 0; 
} 
+1

'cin >> ch;' => 'cin >> word;' для начала. –

+0

Ваш код не читает слово «правильно». Вместо использования 'cin >> ch' используйте' cin >> word'. Впрочем, это не должно произойти. – dasblinkenlight

+0

Мне любопытно, почему он падает. –

ответ

-1

Некоторые chages в вашем коде:

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    // declare vars 
    char ch; 
    int vowels = 0; 
    int consonants = 0; 
    string word = "temp"; 

    // prompt user 
    cout << "Please enter a word: "; 
    cin >> word; 

    // loop vowels and consonants 
    for (int i = 0; i < word.size(); i++) { 
     ch = toupper(word[i]); 
     switch (ch) { 
     case 'A': 
      vowels++; 
      break; 
     case 'E': 
      vowels++; 
      break; 
     case 'I': 
      vowels++; 
      break; 
     case 'O': 
      vowels++; 
      break; 
     case 'U': 
      vowels++; 
      break; 
     default: 
      consonants++; 
     } 
    } 

    // show num of vowels and consanants 
    cout << "Number of Vowels: " << vowels << endl; 
    cout << "Number of Consanants: " << consonants << endl; 

    // pause and exit 
    getchar(); 
    getchar(); 
    return 0; 
} 
+0

Ben Мне не нужны комментарии, чтобы изменить этот код в порядке? Не повторяйте здесь глупых комментариев. –

+0

Я добавил гласные ++ и нарушаю инструкции к каждому гласному и прекрасно работаю! – Revert

+0

@Revert Эта часть изменения ничтожна, метод провала, который у вас есть, в порядке. Единственное изменение, сделанное здесь, означает, что все это слово 'cin >>;'. –

-1

Хорошо, так что это не совсем ответ, но это немного слишком подробный, чтобы поместить в комментарий ...

I просто запустил ваш код, и он работал нормально. Я добавил следующие три библиотеки

#include<string> 
#include<iostream> 
#include<stdio.h> 

И потом:

using namespace std; 

, а затем скомпилированные с g++ filename.

Проверьте, чтобы вы были в библиотеках в актуальном состоянии и что вы правильно компилируете код.

Надеюсь, это поможет.

0

Единственное изменение, которое должно произойти это изменение от:

cin >> ch; 

в

cin >> word; 

И код будет хорошо. Live example

1

Обычно лучше вводить полную строку и затем анализировать ... но если по какой-то причине вам нужно передать символы, как только они введены, вы можете использовать cin.get(). обязательно #include <cctype> если вы хотите использовать toupper().

char nextChar; 
nextChar = cin.get(); 
nextChar = toupper(nextChar); 

int consonants = 0; 
int vowels = 0; 
int words = 0; 

while (nextChar != '\n') 
{ 
    switch (nextChar) 
    { 
    case 'A': 
    case 'E': 
    case 'I': 
    case 'O': 
    case 'U': 
     vowels++: 
     break; 
    case ' ': 
     words++; 
     break; 
    default: 
     consonants++; 
     break; 
    } 
} 
cout << "There were " << consonants << " consonants and " << vowels << " vowels in " << words << " words."; 

вместо окончания на новой строки, если вы хотите ограничить одним словом просто заменить (nextChar != '\n') с (nextChar != ' ').

Смежные вопросы