Цикл C++ While не переназначает строковое значение
Я создал программу, которая подсчитывает количество гласных в предоставленной строке. Он правильно подсчитывает гласные и повторяет их, когда пользователь вводит "у" или "у". Однако, когда он повторяется, он автоматически назначает "" C-строку, которую я пытаюсь использовать.
int main()
{
//Creating repeating decision
char answer = 'y';
while ((answer == 'y') || (answer == 'Y'))
{
//declaring our C-String
char ourString[81] = "Default";
//Prompting user for a string, storing it as a C-String
std::cout << "Please enter a string!(Less than 80 characters please.)\n";
std::cin.getline(ourString, 81);
//Using a loop to count the amount of vowels
int ourNum = 0;
int vowels = 0;
while (ourString[ourNum] != '\0')
{
switch (ourString[ourNum]) {
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
case 'y':
case 'Y':
vowels++;
ourNum++;
break;
default:
ourNum++;
break;
}
}
std::cout << "The numbers of vowels in: \"" << ourString << "\" is " << vowels << "!\n";
std::cout << "Do again? Please enter \"Y\" to repeat, or any other character to escape.";
std::cin >> answer;
}
}
Любое направление будет оценено. Спасибо!
1 ответ
Решение
После того, как вы написали "у" и нажали кнопку ввода, "Y" и "/n"
хранятся во входном буфере, поэтому "y" переходит к ответу char, а "/ n" считается вводом следующей строки getline. Есть несколько решений для этого. Вы можете добавить вызов cin.ignore()
после cin >> yes
, Или вы можете сделать да строку и использовать getline
вместо operator>>
там.