为什么我这行代码不输出-1呢


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;

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7414362
  • 这篇博客也不错, 你可以看下有4个互不相同的数字,输出由其中三个不重复数字组成的排列
  • 除此之外, 这篇博客: 保证只要看一遍,新手也能写出来的超简单五子棋代码中的 1. 菜单打印页 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 对于一个游戏来说,第一个映入我们眼帘的当然是它的游戏界面了即使我们只是做一个简单的控制台程序,但我们还是尽可能的应该取种追求完美,这也是作为程序猿应该有的一种习惯;虽然作为一个初学者,但我还是想要尽可能的将它在我的能力范围之内做的更好一些。
    这个游戏界面可能有一些繁琐,只是我在学习最初的时候,看到别人界面的设计而得到的灵感罢了,大家也是可以将自己的界面设计的更完美一些。

    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");
    }
    
  • 您还可以看一下 张云波老师的以太坊智能合约项目实战课程中的 代币发行和转账测试小节, 巩固相关知识点