C++ While循环不重新分配字符串值
Posted
技术标签:
【中文标题】C++ While循环不重新分配字符串值【英文标题】:C++ While loop not re-assigning string value 【发布时间】:2019-07-18 07:32:03 【问题描述】:我创建了一个程序来计算提供的字符串中元音的数量。它正确计算元音并在用户提供“y”或“Y”时重复。但是,当它重复时,它会自动将“”分配给我尝试使用的 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;
任何方向都将不胜感激。谢谢!
【问题讨论】:
@KaysKadhi 的答案是正确的。此外,既然您有工作代码,您也可以简化switch
语句的结尾。您只需要case 'Y': vowels++; default: ourNum++; break;
而不是break
在case
和default
语句之后
【参考方案1】:
写完“y”并按下回车键后,“Y”和"/n"
都存储在输入缓冲区中,所以“y”进入答案字符,“/n”被认为是输入下一个 getline。
有几个解决方案。您可以在cin >> yes
之后添加对cin.ignore()
的呼叫。或者,您可以将 yes 设为字符串,并在此处使用 getline
而不是 operator>>
。
【讨论】:
以上是关于C++ While循环不重新分配字符串值的主要内容,如果未能解决你的问题,请参考以下文章