这里是编程和Stackoverflow的新手。刚刚有一个关于编写类刽子手程序的一部分的问题。
为了尽早启动它,我必须手动硬编码答案并将其设置为随机选择一个,如下所示:
srand(time(NULL));
string Phrases[3] = {"evan almighty","the hunger games","click"};
string SecretWord = Phrases[rand()%3];
我正在尝试使用txt文件作为修改答案列表的简单方法,而不是使我的主代码混乱(根据我的教授的建议)。
所以,我被建议使用getline和循环:
string Phrases[10];
ifstream fin("hangman.txt");
for (int x=0; x<10; x++)
{
getline (fin, Phrases[x]);
}
string SecretWord = Phrases[rand()%10]
它工作正常,但我想知道是否有办法避免硬编码答案/短语的总数。
这一切都在CodeBlocks中完成,使用int main(),并返回0,仅用于上下文。
谢谢!
答案 0 :(得分:1)
动态内存分配
让我们假设我们的数组是int array[3]
您说您希望操作系统的内存大小为3*sizeof(int)
您可以在运行时确定阵列的大小。
在此示例中,您将在编译时确定数组大小:
#include <iostream>
#include <new>
using namespace std;
int main ()
{
int i,n;
int * p;
cout << "How many numbers would you like to type? ";
cin >> i;
p= new (nothrow) int[i];
if (p == nullptr)
cout << "Error: memory could not be allocated";
else
{
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << p[n] << ", ";
delete[] p;
}
return 0;
}
输出:
您想输入多少个数字? 5
输入数字:75
输入数字:436
输入数字:1067
输入数字:8
输入数字:32
您输入了:75,436,1067,8,32,
此示例取自:http://www.cplusplus.com/doc/tutorial/dynamic/
或者您可以使用std::list
,std::stack
,std::vector
等数据类型...
堆栈示例:
stack<string> slist;
slist.add("stack");
slist.add("a");
slist.add("am");
slist.add("i");
for(i=0;stack.size();i++)
cout << stack.pop()<< " ";
输出:
我是一个堆栈
答案 1 :(得分:0)
一种简单的方法是计算文本文件中的行数。这可以通过以下方式实现:
ifstream file("hangman.txt");
string line;
int lineCount = 0;
while (getline(file, line))
lineCount++;
file.close();
在这段代码之后,lineCount将包含文本文件中的行数,这应该是答案的数量。
当然,如果你的文件中有空白行,你可能想在循环中添加一个if语句,以便在递增计数器之前检查行上是否真的有答案。