私は C++ に比較的慣れていません。今年から学習を始めたばかりです。テキストドキュメントを取り込んで配列に保存する小さなプログラムを書くのに苦労しています。次に、その配列を取得し、特定の方法で値をランダム化します。ライダーと馬を適切な位置に配置するためのロスタリング プログラムです。
この関数 (gen() ) で試みているのは、 entry[num] を entry2[num2] にコピーすることです。ここで、num は存在するエントリの量であり、num2 はランダムに生成された rand() の数値です。次に、新しいエントリが古いエントリよりも少なくとも 15 ポジション多いかどうかを確認する必要がありました (この場合、馬のライダーは次のイベントの前に休憩を取ることができます)。
ご想像のとおり、このアプリケーションは機能しません。もっと簡単な方法があると思いますか? 変数をこの配列に送信するにはどうすればよいですか?また、この関数を取得して配列をメインに戻すにはどうすればよいですか?ポインタを介して推測していますか?
以下にコード全体を添付しました。
/* ________________________________________________________________________________
* | TITLE: main.cpp |
* | AUTHOR: Samuel Abbott (samuel.d.abbott@gmx.com) |
* | PURPOSE: to take camp draft data in, randomise it with certain values, |
* | and output the new roster as a text document |
* | DATE: may 1, 2012 |
* | LAST EDIT: may 3,2012 |
* |______________________________________________________________________________|
*/
#include <iostream>
#include <string>
#include <stdlib.h> //random number
#include <time.h> //random number
#include <fstream> //used for input / output of external files
using namespace std;
/*
* TITLE: gen
* PURPOSE: to randomise the entries , check to see if they are more then 15 units apart, and return a pointer to the randomised array
* string entry[] holds original values
* int num [] holds number of entries
*/
sting gen(string entry[], int num)
{
int count = 0;
string entry2[num]; //randomised array
/* initialize random seed: */
srand(time(NULL));
for (count =0; count < num)
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
/* a series of if checks to make sure the entry is no less then 15 positions from the previous entry */
if (entry2[num2]=entry[num-15])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-14])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-13])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-12])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-11])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-10])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-9])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-8])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-7])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-6])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-5])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-4])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-3])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-2])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else if (entry2[num2]=entry[num-1])
{
num2 = rand() % num; //generate random number
entry[num] = entry2[num2]; //copy number from array to a random position in the next array
}
else
{
entry[num] = entry2[num2];
}
}
string pointer* = entry2[]
return pointer
}
/*
* Title : Loading
* Purpose: This function generates a loading animation. in other words. just a fancy graphic.
* HAS NO LOADING PURPOSE
*/
void loading()
{
/* Declare loading variable, this variable is just the screen printout */
string loading = "...";
int time = 0;
int loadtime = 10;
/* print out loading animation */
while (time != loadtime)
{
cout << loading;
time++;
}
}
void loading();
/*
* Title: Main
* Purpose: this is the main function for the randomisation program
*/
int main()
{
//declare all variables
string fname = "";
int count;
string line;
ifstream inputfile;
char c;
int num=0;
/* introduction */
cout << "Roster Randomisation Generator" << endl;
/* Get input for roster name */
cout << "Enter a name for the roster, such as 13022012coolah:"<<endl;
cin>> fname;
/* Begin generating roster */
cout << "Roster Generation in progress." << endl;
loading();
/* get amount of lines in text file .. used to determine how many entries there are to avoid printing blank spaces*/
inputfile.open("output.txt");
while (inputfile.good())
{
c = inputfile.get();
if (c=='\n')
{
num++;
}
}
inputfile.close();
cout<<"Number of Entries counted is: "<<num<<endl;
string entry[num];
cout << "Grabbing entries from entry file..."<<endl;
/* open text file*/
inputfile.open("output.txt");
/* read all data into the array entry[] */
for (count = 0; count < num; count++)
{
getline(inputfile,line); //Gets a single line from example.txt
entry[count]=line;
// inputfile >> entry[count];
}
inputfile.close();
cout <<"Found the following entries: " <<endl;
/* output captured entries*/
for (count =0; count < num; count++)
{
cout <<entry[count] <<endl;
}
return 0;
}