奇怪的符号打印出来而不是字符串
Weird symbols printing out instead of strings
我试图制作这个简单的程序来模拟在游戏中打开板条箱。但是,当我运行它时(首先输入 1、2 或 3,然后输入一个大数字,如 100(,它会正确打印出几乎所有内容,但有时(100 次中的一两次(它会打印奇怪的符号而不是它应该打印的字符串。为什么?
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <windows.h>
using namespace std;
//This function is only here to make retrieving random numbers more pretty.
int getrand(int min, int max);
//This function will return what level of rarity the item is as a string.
string getrare();
//This function will return the certification of the item as a string.
string getcert();
//This function will return the crate being opened to a string, and will error check.
string cratePrompt();
//This function will return the specific item received from a specific crate.
string getitem(string crateNum);
int rareCount=0;
int veryrareCount=0;
int importCount=0;
int exoticCount=0;
int blackmarketCount=0;
int certCount=0;
int main(){
unsigned seed;
//This group of text here is to get a seed for randomness.
seed=time(0);
srand(seed);
//This is where the magic happens.
int count=0;
int crateQuantity;
string certTest;
string crateChosen;
crateChosen=(cratePrompt());
cout<<"nHow many crates do you want to open?nn";
cin>>crateQuantity;
cout<<endl;
string itemActual;
while(count<crateQuantity){
certTest=getcert();
if (certTest!="Null"){
cout<<certTest<<" ";
}
cout<<getitem(crateChosen);
cout<<endl;
count++;
}
cout<<"nnnYou got "<<rareCount<<" Rare items!n";
cout<<"You got "<<veryrareCount<<" Very Rare items!n";
cout<<"You got "<<importCount<<" Import items!n";
cout<<"You got "<<exoticCount<<" Exotic items!n";
cout<<"You got "<<blackmarketCount<<" Black Market items!nn";
cout<<certCount<<" of the items were certified!";
}
int getrand(int min, int max){
return ((rand()%(max-min+1))+min);
}
string getrare(){
int rando=(getrand(1,10000));
if ((rando>=1)&&(rando<=5472)){
rareCount++;
return "Rare";
}
else if ((rando>=5473)&&(rando<=8264)){
veryrareCount++;
return "Very Rare";
}
else if ((rando>=8265)&&(rando<=9476)){
importCount++;
return "Import";
}
else if ((rando>=9477)&&(rando<=9868)){
exoticCount++;
return "Exotic";
}
else if ((rando>=9869)&&(rando<=10000)){
blackmarketCount++;
return "Black Market";
}
else{
return "An error has happened";
}
}
string getcert(){
int iscert=getrand(1,100);
int whichcert=getrand(1,15);
if ((iscert>=16)&&(iscert<=100)){
return "Null";
}
else if ((iscert>=1)&&(iscert<=15)){
certCount++;
if (whichcert==1){
return "[Acrobat]";
}
if (whichcert==2){
return "[Aviator]";
}
if (whichcert==3){
return "[Goalkeeper]";
}
if (whichcert==4){
return "[Guardian]";
}
if (whichcert==5){
return "[Juggler]";
}
if (whichcert==6){
return "[Paragon]";
}
if (whichcert==7){
return "[Playmaker]";
}
if (whichcert==8){
return "[Scorer]";
}
if (whichcert==9){
return "[Show-Off]";
}
if (whichcert==10){
return "[Sniper]";
}
if (whichcert==11){
return "[Striker]";
}
if (whichcert==12){
return "[Sweeper]";
}
if (whichcert==13){
return "[Tactician]";
}
if (whichcert==14){
return "[Turtle]";
}
if (whichcert==15){
return "[Victor]";
}
}
else{
return "An error has happened";
}
}
string cratePrompt(){
string answer;
bool valid=0;
while (valid==0){
cout<<"Which crate do you want to open?nn";
cin>>answer;
if ((answer=="1")||(answer=="c1")||(answer=="cc1")||(answer=="C1")||(answer=="CC1")){
return "CC1";
}
else if ((answer=="2")||(answer=="c2")||(answer=="cc2")||(answer=="C2")||(answer=="CC2")){
return "CC2";
}
else if ((answer=="3")||(answer=="c3")||(answer=="cc3")||(answer=="C3")||(answer=="CC3")){
return "CC3";
}
else if ((answer=="4")||(answer=="c4")||(answer=="cc4")||(answer=="C4")||(answer=="CC4")){
return "CC4";
}
else{
cout<<"Please enter a valid option (1, 2, 3, or 4)n";
}
}
}
string getitem(string crateNum){
string rarity = getrare();
//(Rarity)Select is used to select exactly which item they will get out of the possibilities.
int BMSelect= getrand(1,6);
int ESelect= getrand(1,2);
int ISelect= getrand(1,3);
int VRSelect= getrand(1,4);
int RSelect= getrand(1,5);
if (crateNum=="CC1"){
if (rarity=="Rare"){
if(RSelect==1){
return "(Takumi) Combo";
}
else if(RSelect==2){
return "(Breakout) Vice";
}
else if(RSelect==3){
return "(Dominus) Pollo Caliente";
}
else if(RSelect==4){
return "(Dominus) Arcana";
}
else if(RSelect==5){
return "(Breakout) Shibuya";
}
}
else if (rarity=="Very Rare"){
if (VRSelect==1){
return "(Takumi) Anubis";
}
else if (VRSelect==2){
return "(Breakout) Dot Matrix";
}
else if (VRSelect==3){
return "(Dominus) Snakeskin";
}
else if (VRSelect==4){
return "Chakrams";
}
}
else if (rarity=="Import"){
if (ISelect==1){
return "Dominus GT";
}
else if (ISelect==2){
return "Trinity";
}
else if (ISelect==3){
return "Takumi RX-T";
}
}
else if (rarity=="Exotic"){
if (ESelect==1){
return "Photons";
}
else if (ESelect==1){
return "Loopers";
}
}
else if (rarity=="Black Market"){
if (BMSelect==1){
return "Biomass";
}
else if (BMSelect==2){
return "Heatwave";
}
else if (BMSelect==3){
return "Hexed";
}
else if (BMSelect==4){
return "Slipstream";
}
else if (BMSelect==5){
return "Parallax";
}
else if (BMSelect==6){
return "Labyrinth";
}
}
else{
cout<<"AN ERROR HAS OCCURED";
}
}
if (crateNum=="CC2"){
if (rarity=="Rare"){
if(RSelect==1){
return "(Octane) Dragon Lord";
}
if(RSelect==2){
return "(Venom) Nine Lives";
}
if(RSelect==3){
return "(Road Hog) Carbonated";
}
if(RSelect==4){
return "(Takumi) Whizzle";
}
if(RSelect==5){
return "(Merc) Narwhal";
}
}
else if (rarity=="Very Rare"){
if (VRSelect==1){
return "(Octane) Distortion";
}
if (VRSelect==2){
return "(Merc) Warlock";
}
if (VRSelect==3){
return "Polygonal";
}
if (VRSelect==4){
return "(X-Devil) Snakeskin";
}
}
else if (rarity=="Import"){
if (ISelect==1){
return "X-Devil Mk2";
}
if (ISelect==2){
return "Road Hog XL";
}
if (ISelect==3){
return "Pixel Fire";
}
}
else if (rarity=="Exotic"){
if (ESelect==1){
return "Lightnings";
}
if (ESelect==1){
return "Lobos";
}
}
else if (rarity=="Black Market"){
if (BMSelect==1){
return "Biomass";
}
if (BMSelect==2){
return "Heatwave";
}
if (BMSelect==3){
return "Hexed";
}
if (BMSelect==4){
return "Slipstream";
}
if (BMSelect==5){
return "Parallax";
}
if (BMSelect==6){
return "Labyrinth";
}
}
else{
cout<<"AN ERROR HAS OCCURED";
}
}
if (crateNum=="CC3"){
if (rarity=="Rare"){
if(RSelect==1){
return "(Breakout) Falchion";
}
if(RSelect==2){
return "(Breakout) Turbo";
}
if(RSelect==3){
return "(Dominus) Mondo";
}
if(RSelect==4){
return "(Octane) Shisa";
}
if(RSelect==5){
return "(Masamune) Oni";
}
}
else if (rarity=="Very Rare"){
if (VRSelect==1){
return "(Takumi) Distortion";
}
if (VRSelect==2){
return "(Breakout) Snakeskin";
}
if (VRSelect==3){
return "Troikas";
}
if (VRSelect==4){
return "(Octane) MG-88";
}
}
else if (rarity=="Import"){
if (ISelect==1){
return "Breakout Type-S";
}
if (ISelect==2){
return "Hypernova";
}
if (ISelect==3){
return "Dark Matter";
}
}
else if (rarity=="Exotic"){
if (ESelect==1){
return "Pulsus";
}
if (ESelect==1){
return "Discotheques";
}
}
else if (rarity=="Black Market"){
if (BMSelect==1){
return "Biomass";
}
if (BMSelect==2){
return "Heatwave";
}
if (BMSelect==3){
return "Hexed";
}
if (BMSelect==4){
return "Slipstream";
}
if (BMSelect==5){
return "Parallax";
}
if (BMSelect==6){
return "Labyrinth";
}
}
else{
cout<<"AN ERROR HAS OCCURED";
}
}
if (crateNum=="CC4"){
if (rarity=="Rare"){
if(RSelect==1){
return "(Octane) Dragon Lord";
}
if(RSelect==2){
return "(Venom) Nine Lives";
}
if(RSelect==3){
return "(Road Hog) Carbonated";
}
if(RSelect==4){
return "(Takumi) Whizzle";
}
if(RSelect==5){
return "(Merc) Narwhal";
}
}
else if (rarity=="Very Rare"){
if (VRSelect==1){
return "(Octane) Distortion";
}
if (VRSelect==2){
return "(Merc) Warlock";
}
if (VRSelect==3){
return "Polygonal";
}
if (VRSelect==4){
return "(X-Devil) Snakeskin";
}
}
else if (rarity=="Import"){
if (ISelect==1){
return "X-Devil Mk2";
}
if (ISelect==2){
return "Road Hog XL";
}
if (ISelect==3){
return "Pixel Fire";
}
}
else if (rarity=="Exotic"){
if (ESelect==1){
return "Lightnings";
}
if (ESelect==1){
return "Lobos";
}
}
else if (rarity=="Black Market"){
if (BMSelect==1){
return "Biomass";
}
if (BMSelect==2){
return "Heatwave";
}
if (BMSelect==3){
return "Hexed";
}
if (BMSelect==4){
return "Slipstream";
}
if (BMSelect==5){
return "Parallax";
}
if (BMSelect==6){
return "Labyrinth";
}
}
else{
cout<<"AN ERROR HAS OCCURED";
}
}
}
我马上看到你有返回字符串的函数,这些函数可以在不返回的情况下退出。 这导致了臭名昭著的"未定义行为",而C++是值得注意的。
请注意,在C++退出函数作用域而不返回不会默认构造返回值。 如上述评论所示添加警告应指出它们。
在 else 子句中,您有
cout << "AN ERROR HAS OCCURRED";
你应该这样做
#include <assert.h>
...
string get_stuff() {
if (something) {
...
} else if (something_els) {
...
} else {
assert(!"Default case hit");
}
}
这将在大多数环境中停止调试器中的程序,并打印一条有用的消息,其中包含命中默认大小写的行号。
与上述建议一样,您也可以使用调试器演练,并亲自观察代码在没有返回的情况下离开函数的末尾。
相关文章:
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- 字符串到无符号字符
- 尝试将字符串从文件读取到无符号字符向量中
- 将字符串转换为无符号字符数组/字节数组
- 如何将字符串转换为无符号字符数组
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 如何使用istream_iterator将无符号字符向量转换为字符串?
- 将 unicode 字符串与 c ++ 符号进行比较?
- 如何从字符数组(不是字符串数组)中删除符号
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将字符串变量分配给无符号字符变量
- 将'\x00\x00\x00'格式的字符串转换为无符号字符数组
- 为C++字符串中的特殊符号 (") 赋予文字含义的有效C++方法
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- 提取或(甚至更好)更改 char* 字符串的第一个符号
- 将无符号字符 * 转换为十六进制字符串
- 如何对包含数字和符号的字符串进行排序?
- C++如何将无符号字符数组转换为字符串?
- C++字符串表示中将无符号字符数组转换为长(或长长)
- 将数学符号存储到字符串 c++ 中