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在以上情况。
答案 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;
}
答案 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