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; 而不是breakcasedefault 语句之后 【参考方案1】:

写完“y”并按下回车键后,“Y”和"/n"都存储在输入缓冲区中,所以“y”进入答案字符,“/n”被认为是输入下一个 getline。 有几个解决方案。您可以在cin &gt;&gt; yes 之后添加对cin.ignore() 的呼叫。或者,您可以将 yes 设为字符串,并在此处使用 getline 而不是 operator&gt;&gt;

【讨论】:

以上是关于C++ While循环不重新分配字符串值的主要内容,如果未能解决你的问题,请参考以下文章

03-string字符串和while循环

在 C++ 中满足某些条件(如果)后,如何重新启动 while 循环? [关闭]

C++学习-while循环语句

如何使用文件中的while循环为我的结构分配值?

PHP - 在while循环中分配值并在循环外单独访问它们

C++ 基本 While 循环:未知输入和值增量