【问题标题】:C++ outputs garbage values sometimesC++ 有时会输出垃圾值
【发布时间】:2023-09-29 02:04:01
【问题描述】:

我正在尝试创建一个简单的 PapersPlease 之类的游戏,但是当我的程序从我的数组中输出一个随机名称时,它会输出一个垃圾值 (�),我不确定如何解决这个问题:

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int random_number;
string RandomName;

string names[12] = {"Lucas","Rendeev","J2Trappy","D2Savvy","James","Daniel","Abraham","Shaggy","Luke","Harry","Rick","Morty"};


int main(){

    srand(time(NULL));
    random_number = rand() % 12;
    RandomName = names[random_number - 1];
    cout << "Name: "<<RandomName<<"\n";
}

样本输出:

Name: �
�t

【问题讨论】:

  • 提示:如果random_number0 会发生什么?
  • - 1 是干什么用的?
  • 您认为rand() % 12 产生的值范围是多少?看起来您认为范围是[1, 12],但您应该更仔细地查看它。 :)
  • 旁注:rand 在可用的计算能力和大多数人的需求之间取得了很好的平衡,当时 C 开始滚动并被正式化。今天,random library 中提供了更强大的工具。 Here is a video that covers the improvements and how to use them

标签: c++ arrays random


【解决方案1】:

RandomName = names[random_number - 1];

如果 random_number 等于0,那么random_number - 1 将等于-1,这超出了数组的范围。 确保始终位于 011 之内(数组大小 - 1)

【讨论】:

  • 他们可能不明白为什么random_number 可能永远是0。这可能有助于解释rand() % 12 产生的值范围。
  • 谢谢!我自己都不知道!