如果用户输入,cin.getline()不应接受空格?

时间:2020-05-12 07:07:16

标签: c++ c++11

class acc_cr{
protected:
  char username[100];
  char password[100];
  int i = 0;
public:
  void create(){
      fstream fout;
      //new username:
      cout<<"Enter Your New Username:\n";
      while(i == 0){
        cin.getline(username,100);
        //checking if this username already exists:
        if(fstream(username)){
          cout<<"Username Already Exists!\nTry Another Username:\n";
        }
        else{
          fout.open(username,ios::out);//creating new file to store contents
          break;
        }
      }
    //new password:
    cout<<"Enter Your New Password:\n";
    cin.getline(password,100);

    //inserting data into csv file:
    fout<<username<<","
        <<password<<"\n";
  }
};

如果任何用户输入了上述程序要求的用户名或密码,程序将接受它,但是这里的问题是我不希望该程序也接受空间...如果用户键入“ “我的用户名”而不是“我的用户名”。...如果他们键入“我的用户名”,则程序应显示错误,请不要输入空格...。我最近开始使用cin.getline(),因为cin在以上情况。

2 个答案:

答案 0 :(得分:0)

如果您使用的是C ++ 11,则可能希望像这样使用std::string

std::string username;
std::getline(std::cin, username);

if (username.find(' ') != std::string::npos) {
    std::cout << "Username should not contain spaces!" << std::endl;
}

了解std::string::find

答案 1 :(得分:0)

如果您使用cin.getline(username, 100,' '),则在用户输入字符串时,输入将自动终止。但我真的不建议这样做,因为它会破坏用户的整体体验。

我建议的最佳解决方案是使用std::string而不是char数组。然后,您将可以使用stringstream

    string username;
        .
        .
        .

cout<<"Enter Your New Username:\n";
      while(i == 0){
        getline(cin,username);

        stringstream check(username);
         string intermediate; 
    // Tokenizing w.r.t. space ' ' 


 //Extracting the username up to first space
    getline(check, intermediate,' ');

//Checking if anything is there after first space
    if(getline(check, intermediate,' ')){
          cout<<"Invalid Username-contains spaces!\nTry Another Username:\n";
        }


        //checking if this username already exists:
        else if(fstream(username)){
          cout<<"Username Already Exists!\nTry Another Username:\n";
        }
        else{
          fout.open(username,ios::out);//creating new file to store contents
          break;
        }
      }

有关std::getline的更多信息,请访问this page

要学习字符串(比char数组凉爽的字符串,请转到here

这是最酷的,using stringstream to tokenize a string