簡體   English   中英

用戶檢測到的C ++檢測ENTER鍵

[英]C++ Detecting ENTER key pressed by user

我有一個循環,要求用戶輸入名稱。 當用戶按ENTER鍵.....或輸入20個名稱時,我需要停止。 但是,當用戶按下ENTER鍵時,我的方法不會停止

//loop until ENTER key is entered or 20 elements have been added
bool stop = false;
int ind = 0;
while( !stop || ind >= 20 ){

    cout << "Enter name #" << (ind+1) << ":";
    string temp;
    getline(cin, temp);
    int enterKey = atoi(temp.c_str());        

    if(enterKey == '\n'){
        stop = true;            
    }
    else{
        names[ind] = temp;
    }

    ind++;


}

您使用atoi將讀取的字符串轉換為整數:

int enterKey = atoi(temp.c_str());        

如果temp是類似於"1234"的字符串,則將enterKey設置為1234 然后,將enterKey與ASCII值\\n 這很可能沒有做任何有用的事情。

同樣std::getline只能讀取直到(但不包括)下一個'\\n'的字符。 如果用戶僅按Enter鍵而不輸入其他任何字符,則std::getline將返回一個空字符串。 如果字符串為空,則可以使用其empty()方法輕松測試:

getline(cin, temp);
if (temp.empty()) {
  stop = true;
}

嘗試:

while( !stop && ind < 20 )

要么:

using namespace std;
vector <string> names; // edited.
for (int ind = 0; ind < 20; ++ind)
{
    cout << "Enter name #" << (ind+1) << ":"; 
    string temp;
    getline(cin, temp); 
    if (temp.empty())
        break;
    names.push_back(temp);
}

getline將吃掉您的定界符,該定界符為'\\ n',因此您可能希望檢查空字符串。 在致電atoi之前先做。

嘗試改為stop = temp.empty() getline不應包含任何換行符。 空行應導致空字符串。

另外,Charles是正確的,您的while條件不正確,請使用while( !stop && ind < 20) 用戶的書寫方式需要輸入20個值和一個空行。 查爾斯的改變說,要滿足任何一個條件(不是同時滿足兩個條件)就打破。

為了完整起見,下面是建議的新代碼:

bool stop = false;
int ind = 0;
while( !stop && ind < 20 ){

    cout << "Enter name #" << (ind+1) << ":";
    string temp;
    getline(cin, temp);
    if(temp.empty()) {
        stop = true;
    } else {
        names[ind] = temp;
    }

    ind++;    
}

我個人將代碼編寫如下:

vector<string> names;
for(int ind = 0; ind < 20; ind++) {
  cout << "Enter name #" << (ind + 1) << " (blank to stop): ";
  string name;
  getline(cin, name);
  if(name.empty() || cin.eof()) {
     break;
  }
  names.push_back(name);
}

cout << "Read " << names.length() << " names before empty line detected." << endl;

您想使用cin.get(); cin >> temp; 我相信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM