2015-10-12 37 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

相關問題