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

时间:2015-10-12 11:14:33

标签: c++

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

char selection;
bool finish = false;
while (!finish){
    print_menu();
    cin >> selection;
    finish = perform_operation(selection);
}

这就是我获取用户输入的方式。我想获得用户输入的第一个字符并忽略其余部分,并表现如此。我该怎么办?

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

感谢您的帮助!

另一个案例:

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

4 个答案:

答案 0 :(得分:6)

如果您想阅读一个字符,请阅读一个字符。

没有一个循环可以读取尽可能多的字符。

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:DossierViewModel}">
        <local:Dossier />
    </DataTemplate>
</Window.Resources>
...
<ContentControl x:Name="ContentControl" Content="{Binding SampleDossier}"/>

我已经为您的I / O操作添加了基本的错误检查。

答案 1 :(得分:1)

只获得一个可以使用的角色:

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;
}

答案 2 :(得分:1)

忽略除第一个角色之外的所有内容,直到下一个换行:

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

答案 3 :(得分:0)

跳过始终重新打印菜单

print_menu();

然后使用等待ENTER的函数:

  

有几种方法,这里有一些可能的单行方法:

     
      
  1. 使用getch()(需要#include)。

  2.   
  3. 使用getchar()(预期输入,需要#include)。

  4.   
  5. 使用cin.get()(预期输入,需要#include)。

  6.   
  7. 使用系统(&#34;暂停&#34;)(需要#include)。

  8.   

另见此主题C++ wait for user input