2015-10-12 40 views
1

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

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

这是我如何得到用户输入。我想要得到用户输入的第一个字符,并忽略其余部分,并表现如此。我该怎么做?

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

感谢您的帮助!

另一种情况:

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

+0

你想从输入获得首批“非白”字和忽略下面的字符直到'\ n'? – PiotrNycz

回答

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

循环呢? –

+1

你的建议改变实际上并没有改变任何东西。 –

+0

是啊编辑的代码工作正常,但我忘了问,我真的需要一个功能,采用给定的特定字符数量的输入。例如,我需要用户输入一个名称,但我只想获得该名称的前20个字符,并忽略其余部分。我怎样才能做到这一点? –

6

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

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

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

我已经为您的I/O操作添加了基本的错误检查,以获得良好的度量。

+0

这是一个程序,只要一个人不退出程序就可以获得用户输入。所以我绝对必须使用一个while循环。 Usin如果块不是这种情况下的选项 –

+0

@TolgaŞen:要么只想读一个字符,要么想读多个字符。这是什么? –

+0

我想阅读完全相同数量的字符,我给这个函数。它可能只是一个或多个 –

0

跳过总是重印菜单

print_menu();

然后使用该等待进入功能:

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

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

  2. 使用getchar()(对于Enter需要,需要#include)。

  3. 使用cin.get()(预期为Enter,需要#include)。

  4. 使用系统(“暂停”)(需要#include)。

也看到这个线程C++ wait for user input

1

忽略除第一个字符,直到下一个换行符的一切:

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

也许'cin.ignore(10000,'\ n');'? – PiotrNycz

+0

也许而不是10000 - 使用'std :: numeric_limits :: max() - 1'? – PiotrNycz

+0

@PiotrNycz不只是可能。 – molbdnilo

相关问题