const char& hstring::operator[](unsigned short index)
{
if (index > uslen) //uslen对象的字符串长度
return -1;
else
return cstr[index];
}
std::cout << hstr1[100000000] << std::endl;
为什么我这行代码不输出-1呢
返回类型是char类型啊, 按字符输出的,不是按整数。
改成 std::cout<<(int)hstr1[100000000]<<std::endl;
或者先对返回值进行判断 if(hstr1[100000000] == -1) std::cout<<-1<<endl;
该回答引用chatgpt:
根据您提供的代码,当您尝试访问索引超出字符串长度的元素时,operator[]函数返回的是一个char类型的引用。如果您尝试在std::cout语句中输出一个char类型的引用,它会被解释为一个字符并打印出来。换句话说,您的代码将尝试打印指向内存中随机位置的单个字符值。
为了解决这个问题,您可以更改operator[]函数的返回类型为char,并在索引超出字符串长度时返回一个特定值,例如-1。然后,您可以在std::cout语句中检查返回值是否等于-1,并在需要时采取相应的措施。
下面是一个修改后的operator[]函数的示例:
char hstring::operator[](unsigned short index) const
{
if (index >= uslen) // 注意这里是>=
return -1;
else
return cstr[index];
}
在std::cout语句中使用它:
char c = hstr1[100000000];
if (c == -1)
std::cout << "Index out of range" << std::endl;
else
std::cout << c << std::endl;
对于一个游戏来说,第一个映入我们眼帘的当然是它的游戏界面了即使我们只是做一个简单的控制台程序,但我们还是尽可能的应该取种追求完美,这也是作为程序猿应该有的一种习惯;虽然作为一个初学者,但我还是想要尽可能的将它在我的能力范围之内做的更好一些。
这个游戏界面可能有一些繁琐,只是我在学习最初的时候,看到别人界面的设计而得到的灵感罢了,大家也是可以将自己的界面设计的更完美一些。
void MenuUi(){
printf("\t╔══════════════════════════════════════════════════════════════╗\n");
printf("\t║ ║\n");
printf("\t║ 欢迎使用五子棋对战程序 祝您玩的愉快挑战无极限 ║\n");
printf("\t║ ║\n");
printf("\t║ ._______________________. ║\n");
printf("\t║ | _____________________ | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I 五 子 棋 I | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I___________________I | ║\n");
printf("\t║ !_______________________! ║\n");
printf("\t║ ._[__________]_. ║\n");
printf("\t║ .___|_______________|___. ║\n");
printf("\t║ |::: ____ | ║\n");
printf("\t║ | ~~~~ [CD-ROM] | ║\n");
printf("\t║ !_____________________! ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ 寒 星 溪 月 疏 星 首,花 残 二 月 并 白 莲。 ║\n");
printf("\t║ 雨 月 金 星 追 黑 玉,松 丘 新 宵 瑞 山 腥。 ║\n");
printf("\t║ 星 月 长 峡 恒 水 流,白 莲 垂 俏 云 浦 岚。 ║\n");
printf("\t║ 黑 玉 银 月 倚 明 星,斜 月 明 月 堪 称 朋。 ║\n");
printf("\t║ 二 十 六 局 先 弃 二,直 指 游 星 斜 彗 星。 ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ 1.开始游戏 0.离开游戏 ║\n");
printf("\t║ ║\n");
printf("\t╚══════════════════════════════════════════════════════════════╝\n");
}