C++ 仅获取C+中用户输入的第一个字母+;

C++ 仅获取C+中用户输入的第一个字母+;,c++,C++,我编写了一个控制台程序,它从用户那里获取一些特殊字符输入来执行操作。程序要求输入,用户键入“i”表示插入,键入“r”表示删除等。。问题是,当用户键入多个字母时,程序的行为会很奇怪 char selection; bool finish = false; while (!finish){ print_menu(); cin >> selection; finish = perform_operation(selection); } 这就是我获取用户输入的方式。

我编写了一个控制台程序,它从用户那里获取一些特殊字符输入来执行操作。程序要求输入,用户键入“i”表示插入,键入“r”表示删除等。。问题是,当用户键入多个字母时,程序的行为会很奇怪

char selection;
bool finish = false;
while (!finish){
    print_menu();
    cin >> selection;
    finish = perform_operation(selection);
}
这就是我获取用户输入的方式。我只想得到用户输入的第一个字符,而忽略其余字符,以此类推。我怎么做

注意:我不允许使用“string”类,但我可以使用所有str函数

谢谢你的帮助

另一种情况:


如果我想得到特定数量的字符呢?例如:用户输入一个10个字符的名称,但我只想得到前5个字符。我该怎么办?

如果你想读一个字符,就读一个字符

不要让循环读取尽可能多的字符

char selection;
print_menu();
if (cin >> selection)
   finish = perform_operation(selection);
else
   throw std::runtime_error("Bad input!");

我已将基本错误检查添加到I/O操作中,以便更好地测量。

要仅获取一个字符,还可以使用以下方法:

char selection;
cin >> selection; // input: abcd
cin.clear();
fflush(stdin);
printf("you entered the character: %c", selection); //selection='a'
// and nothing remained in input stream. you can safely `cin>>` again :]
您可以将此代码应用于现有代码


为了获得特定数量的特许,您可以使用以下示例:

char* TakeNCharacterFromInput(int _count)
{
    char *input = new char[_count+2];
    std::cin.getline(input, _count+1);
    cin.clear();
    fflush(stdin);
    return input;
}

int main(int args, char* argv[]) {
    char *in1 = TakeNCharacterFromInput(5);//input:123456789 => in1:12345
    char *in2 = TakeNCharacterFromInput(2);//input:123456789 => in2:12
    char *in3 = TakeNCharacterFromInput(1);//input:123456789 => in3:1
    delete[] in1;
    delete[] in2;
    delete[] in3;
}

跳过总是重新打印菜单

打印菜单()

然后使用等待ENTER的函数:

有几种方法可以做到这一点,以下是一些可能的单线方法:

  • 使用getch()(需要包含)

  • 使用getchar()

  • 使用cin.get()

  • 使用系统(“暂停”)(需要包括)


  • 另请参见此线程

    忽略除第一个字符以外的所有内容,直到下一个换行符:

    char selection;
    bool finish = false;
    while (!finish){
        print_menu();
        cin >> selection;
        finish = perform_operation(selection);
        cin.ignore(10000, '\n'); // Totally arbitrary large number.
    }
    

    嗯,你建议的改变实际上并没有改变任何东西。是的,编辑过的代码工作得很好,但我忘了问,我真的需要一个函数,它接受给定数量的特定字符的输入。例如,我需要用户输入一个名称,但我只想获得该名称的前20个字符,而忽略其余字符。我该怎么做?cin.clear()和fflush(stdin)对我不起作用,我仍然可以从cin获取其他输入。我正在使用Ubuntu。是否要从输入中获取第一个“非白色”字符并忽略下面的字符直到
    \n
    ?可能
    cin.ignore(10000,“\n”)?也许不是10000——使用<代码> STD::MuleCimult::Max():1 < /Cord>?@ PIOTrNYCZ不只是可能。@ PioTrNycz我不认为初学者应该被邀请解码大多数的线噪声,比如C++的部分。(有时候我可以发誓C++是perl 6)。我会把这两行(IS> C,是.NIST(…))封装在一个函数中——<代码> Read MeimuChar(STD:CIN)…这是一个只要用户不退出程序就得到用户输入的程序。所以我肯定要使用while循环。如果块不是此选项,则使用case@TolgaŞen:要么你只想读一个字符,要么你想读多个字符。是哪一个?我想读取与函数中给定的字符数量完全相同的字符。它可能只是一个或多个