c ++ getline函数不允许我输入

时间:2015-03-17 10:29:02

标签: c++ palindrome

所以我有一个回文程序,这里是代码:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

void palindrome();
void compareTwoInt();
bool validation(const string&);

int main()
{
int selection;
cout << "\t\t\t MENU\n";     
cout << "\t\t\t ----\n";
cout << "\t\t\t1. Palindrome";
cout << "\n\t\t\t2. Compare Two Integers";
cout << "\n\t\t\t3. End program\n";
cout << "\n\t\t\tEnter your choice : ";
cin >> selection;

while (selection < 0 || selection > 4)
{
    cout << "\t\t\nInvalid entry. Please enter an appropriate entry.";
    cout << "\n\n \t\t\tEnter your choice: ";
    cin >> selection;
}
if (selection == 1)
{
    cout << "Enter a word, phrase, sentence: \n";
    string input;
    getline(cin, input);

    string input2;
    for (unsigned int i = 0; i < input.length(); i++)
    {
        if (isalnum(input[i]))
        {
            input2 += toupper(input[i]);
        }
    }

    cout << input2 << endl;

    if (validation(input2))
    {
        cout << "The phrase is a palindrome!" << endl;
        cout << "Press <Enter> key back to menu" << endl;

    }

    else
    {
        cout << "The phrase is not a palindrome!" << endl;
        cout << "Press <Enter> key back to menu" << endl;

    }
    fflush(stdin);
    cin.get();
    system("cls");
    return main();

}
else if (selection == 2)
{
    compareTwoInt();
    fflush(stdin);
    system("cls");
    return main();
}
else if (selection == 3)
{
    cout << "\t\t Good Bye. Press <Enter> key to End the program.\n";


}
fflush(stdin);
cin.get();
return 0;
}



void compareTwoInt()
{
int first, second;
cout << "\n\nEnter your positive integer : ";
cin >> first;
cout << "\nEnter your positive integer : ";
cin >> second;


fflush(stdin);
cin.get();


}

bool validation(const string& input)
{
    return input == string(input.rbegin(), input.rend());
}

出于某种原因,当我为回文选择1时,它不会让我写下这些文字,(换句话说,它不会让我输入)

控制台只是说:

输入单词,短语,句子:

这句话是回文!

按键返回菜单

有人知道如何解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

当你为回文选择1时,你点击回车。因此,您的输入包含数字1后跟换行符。您的cin >> selection;读取数字1,然后您的getline(cin, input);读取换行符,它将其解释为空行。你没有编写任何代码来对数字后面的换行字符输入做任何合理的事情,所以没有任何明智的事情发生。

请尝试输入1foof<enter>。您的代码将读为1,后跟包含foof的行。