该程序工作得很好..但是如果我想将我的用户名限制为 8 个字符,我应该怎么做??
cout << "Enter your Username it should have a maximum limit of 8 characters\n " << endl;
getline(cin, user, '\n');
我想在这里它应该限制用户 8 个字符 .. 如果大于 8 .. 那么它应该继续询问用户(while 循环??)),直到用户输入少于 8 个字符。
该程序工作得很好..但是如果我想将我的用户名限制为 8 个字符,我应该怎么做??
cout << "Enter your Username it should have a maximum limit of 8 characters\n " << endl;
getline(cin, user, '\n');
我想在这里它应该限制用户 8 个字符 .. 如果大于 8 .. 那么它应该继续询问用户(while 循环??)),直到用户输入少于 8 个字符。
int mystrcmp(const char *s1, const char *s2)
{
while (*s1==*s2)
{
if(*s1=='\0')
return(0);
s1++;
s2++; }
return 1;//return(*s1-*s2);
}
您的 int mystrcmp(const char *s1, const char *s2) 正在返回字符串 s1 和 s2 中第一个不匹配字符的 ascii 值的差异,并且它并不总是 1,因为您的代码应该如此。
可以在此处找到代码的干净实现ideone 链接
您有一些混淆,特别是在 C++ 字符串和 C 字符串之间。
您的mystrcpy函数是尝试复制 C 样式字符串,但在 C++ 中不是必需的。以下是您在 C++ 中的操作方法。替换这个
mystrcpy(new_user,user)
有了这个
new_user = user;
如您所见,复制 C++ 字符串比复制 C 字符串要容易一些。您可以删除该mystrcpy功能。
同样,您的mystrcmp函数是尝试比较 C 字符串。同样,在 C++ 中它不是必需的。替换这个
f = mystrcmp(user2,new_user);
if (f==0)
{
cout << "Successful Login!! \n ";
}
有了这个
if (user2 == new_user)
{
cout << "Successful Login!! \n ";
}
您可以再次看到比较 C++ 字符串比比较 C 字符串更容易。您可以再次删除该mystrcmp功能。
逻辑上还有一些其他错误,还有一些缺少分号,但我会让你弄清楚这些。
您的代码几乎无处不在。例如:
#include <string>如果您要使用std::string.
cin >> a; if ( a == 1 )- 如果用户根本不输入整数怎么办?您将比较未初始化的 与 的值int,1这会将您置于未定义的行为领域。您应该检查从 的返回cin,或至少初始化a。
正如约翰所提到的,您读入std::strings,然后尝试将它们视为 C 字符串。不要,只需使用new_user = userand if ( user2 == new_user )。
如果用户不这样做,"Enter 1 to enter Signup Screen"您无论如何都会将他们带到注册屏幕。
在你的mystrcmp()函数中,你return 0if *s1 == '\0',但你没有检查 if *s2 == '\0'。这意味着两件事 - 一,如果s2比 短s1,那么你会越界并再次调用未定义的行为,二,如果s2比长于s1但以s1(例如,如果s1包含"billy"和s2包含"billybob")开头,那么你的函数会说它们是不相等时相等。
同样在您的mystrcmp()函数中, this:return(*s1-*s2)将始终返回与 的最后一个索引具有相同索引0的元素的值,或者如果更短,它将调用未定义的行为,如前所述。无论哪种方式,它几乎肯定不是你想要返回的东西。s2s1s2
mystrcpy(target,source)不是有效的函数定义。此函数也仅将 的第一个字符复制source到 的第一个字符target。
当您在错误的输入之后循环时,您检查if (f == 0)and if (f == 1),但您从未f在此循环期间设置,因此无论用户输入什么,您将始终检查初始结果是什么,无论他们接下来输入什么。