기본적으로이 할당을 위해 무작위로 숫자를 기준으로 문자 열을 무작위로 생성하는 미니 프로그램을 만들어야합니다 (0은 A에 해당하고 1은 B에 해당함). , 2는 C에 해당하는 등)가 생성 된 n 번째 문자열에 해당하는 숫자 n과 함께 표시됩니다. 이 문자열과 해당 번호는 텍스트 파일로 인쇄됩니다. 예를 들어, 내 기능은 myFunction
를 호출 된 경우 :C++ 미니 프로그램 무작위 화 된 데이터 쌍을 인쇄합니다
AAAAAAAA 1
IWFNWEFS 2
WEWEFCSD 3
문자열 '문자가 각각 무작위로되어있다 :
myFunction("file.txt", 3)
는 다음과 같은 내용으로 "file.txt를"라는 텍스트 파일을 생성합니다 .
그러나 어떤 이유로 모든 문자열이 어떤 이유로 동일합니다. 즉, 문자열 번호 쌍의 각 행에 대해 모든 문자열이 동일하게 나타납니다 (모든 문자열이 서로 다르거 나 임의로 만들어야하는 경우). 왜 이런 일이 일어나는 걸까요? 여기 내 코드입니다 : 내가 처음 부분에 모두 srand (time(NULL));
및 srand (1);
를 사용하여 시도
#include <iostream>
#include <vector>
#include <cstdlib>
#include "math.h"
#include <fstream>
using namespace std;
string key = ""; // Empty initial key for use in "makeKey".
// "makeKey" function to create an alphabetical key
// based on 8 randomized numbers 0 - 25.
void makeKey() {
int k;
for (k = 0; k < 8; k++) {
int keyNumber = (rand() % 25);
if (keyNumber == 0)
key.append("A");
if (keyNumber == 1)
key.append("B");
if (keyNumber == 2)
key.append("C");
if (keyNumber == 3)
key.append("D");
if (keyNumber == 4)
key.append("E");
if (keyNumber == 5)
key.append("F");
if (keyNumber == 6)
key.append("G");
if (keyNumber == 7)
key.append("H");
if (keyNumber == 8)
key.append("I");
if (keyNumber == 9)
key.append("J");
if (keyNumber == 10)
key.append("K");
if (keyNumber == 11)
key.append("L");
if (keyNumber == 12)
key.append("M");
if (keyNumber == 13)
key.append("N");
if (keyNumber == 14)
key.append("O");
if (keyNumber == 15)
key.append("P");
if (keyNumber == 16)
key.append("Q");
if (keyNumber == 17)
key.append("R");
if (keyNumber == 18)
key.append("S");
if (keyNumber == 19)
key.append("T");
if (keyNumber == 20)
key.append("U");
if (keyNumber == 21)
key.append("V");
if (keyNumber == 22)
key.append("W");
if (keyNumber == 23)
key.append("X");
if (keyNumber == 24)
key.append("Y");
if (keyNumber == 25)
key.append("Z");
}
return;
}
// "makeFile" function to produce the desired text file.
// Note this only works as intended if you include the ".txt" extension,
// and that a file of the same name doesn't already exist.
void makeFile(string fileName, int n) {
ofstream ourFile;
ourFile.open(fileName);
int k; // For use in below loop to compare with n.
int l; // For use in the loop inside the below loop.
for (k = 1; k <= n; k++) {
for (l = 0; l < 8; l++) { // To write to the file ONE key
ourFile << key[l]; // C++ only lets me do it this way...
}
ourFile << " " << k << "\n"; // Writes two spaces and the data value
}
}
// Primary function to create our desired file!
void mainFunction(string fileName, int n) {
makeKey();
makeFile(fileName, n);
}
int main() {
mainFunction("file.txt", 3); // To test program
cin.get();
return 0;
}
,하지만 그 중 하나가 나를 위해 작동하지 않았다.
이것은 너무 열심히 일하고 있습니다. 문자의 배열 (단순한 문자열)을 만들고 배열의 인덱스로 임의의 숫자를 사용하십시오. – Gene