【发布时间】:2020-07-27 20:52:44
【问题描述】:
程序读取每行包含一个单词的文件。读取随机单词后,将随机单词放入指针中并返回指针。在主函数中 printf("%s",func("example.txt",str)) 它在程序运行时打印不同的字符串。我想在二维数组(20*20)中执行此操作,如表,但我无法想象如何这样做。当我在内部循环中打印函数时,它在每个循环步骤中都给了我相同的词。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char *word(char *file, char *str);
int main() {
char *str ;
int i, j;
str = (char *)malloc(20);
srand(time(NULL));
char *puzzle[20][20];
for (i = 0; i < 20; i++) {
for (j = 0; j < 20; j++) {
puzzle[i][j] = word("words.txt", str);
}
}
for (i = 0; i < 20; i++) {
for (j = 0; j < 20; j++) {
printf("%s ", puzzle[i][j]);
}
printf("\n");
}
}
char *word(char *file, char *str) {
int end, loop, line;
FILE *fd = fopen(file, "r");
if (fd == NULL) {
printf("Failed to open file\n");
return (NULL);
}
srand(time(NULL));
line = rand() % 100 + 1;
for (end = loop = 0; loop < line; ++loop) {
if (0 == fgets(str, 20, fd)) {
end = 1;
break;
}
}
if (!end)
return (char *)str;
fclose(fd);
free(str);
}
【问题讨论】:
-
标准
mainsn-p 装饰是您问题的接近答案。尝试创建一个指针数组(例如;char *a[sizeRow][sizeCol]),然后为每个指针定义相应的字符串(例如;a[2][3] = strdup(...))。 -
谢谢它很有用,但我仍然无法想象我应该在哪里调用返回指针的其他函数,我需要这个,因为另一个函数每次运行时只返回一个随机地址。并分配我认为一个接一个不会是随机的
-
你最好展示你最初的努力和代码,这样我(或其他人)可以帮助找出是否存在任何错误。
-
İt 已编辑。我知道拼图[i][j]=word("words.txt",str);不合逻辑
-
edit:每行或每列最多 20 个字符,因为它是 20*20 表。我将从文件中取出 10 个单词。每个字符串的(单词)长度可能不同我要打印的位置(字符串开头)将是随机的,如果 10 个单词后有空格,我将在那里打印随机字母,但现在这不是我的主要问题。@ssd