【发布时间】:2015-10-27 07:14:24
【问题描述】:
我有 5 个名字列表
char *name[] = {"a","b","c","d","e"};
我有 3 个文件
char path1[PATH_MAX+1]
snprintf(path1, PATH_MAX+1, "%sfile1.txt",dirname);
FILES *filename1 = fopen(path1, "w")
.
.
.
char path3[PATH_MAX+1]
snprintf(path3, PATH_MAX+1, "%sfile3.txt",dirname);
FILES *filename3 = fopen(path3, "w")
我想要的是将 a,b,c,d,e(每个文件一个)随机附加到其中三个文件中而不重复。
我现在拥有的是(其中一个例子)
srand(time(NULL));
int one = rand()%5;
char path1[PATH_MAX+1];
snprintf(path1, PATH_MAX+1, "%sfile1.txt",dirname);
FILES *filename1 = fopen(path1, "w");
fputs(name[one],filename1);
fclose(filename1);
但是,有时我的 file1.txt 和 file3.txt 仍然可能包含 b (相同的字母来自名字)
问题
我是否遗漏了一些东西来确保所有随机结果始终是唯一的?
使用 6 行代码来创建一个文件并在其中附加一个随机名称是否也很有效?我只是想知道我是否必须创建 20 个文件,我会写 120 行基本几乎相同,只是数量不同(文件名1 到文件名3)
谢谢。
【问题讨论】:
-
1.为什么
rand() % 10而你只有 5 个“名字”? 2. 我在您的代码中完全看不到任何内容以确保防止重复。 3. 你不追加,你覆盖你的文件的内容。 -
@Jongware 1) 我已经将它编辑为 5。 2)我猜 srand(time(NULL)) 没有帮助,是吗?抱歉,我对 C 编程有点陌生。
-
srand() 正在初始化随机生成器,time(NULL) 返回当前系统时间。这有助于确保随机生成器不会始终生成相同的数字序列。