-1

我正在学习 C,并决定从 Java 移植我的 Game of Life 代码。除了 FileIO 部分,它似乎并不太难。我的输入文件看起来像:

Beehive
5 6

------
--XX--
-X--X-
--XX--
------

这是我在 Java 中所做的伪代码;

Scanner to open the file,
String line = file.nextLine(),
print the line,
get the second line
Trim and split the firstLine,
String[tokens[0]][tokens[1]],

while(line != NULL) -> string[row][col] = input.charAt(i);
close input,
return string[][]

这就是我到目前为止在 C 中所拥有的,

void fileIO() {
    FILE *file;
    char buffer[BUFFER_SIZE];

    file = fopen("INPUT_FILE", "r");

    if(file == NULL) {
            printf("Cannot open file!");
    }

    while(fgets(buffer, BUFFER_SIZE, file) != NULL ) {

    }
}

我不确定如何从这里开始?谁能给我一个指示从这里走哪条路?

4

1 回答 1

1

打印一行puts

puts(buffer);

请注意,在fgets,之后buffer包含换行符\n,它也会被打印出来。我猜你想要这种行为(不确定这在 Java 中是如何工作的)。


修剪和分割线sscanf

int height, width;
...
sscanf(buffer, "%d%d", &height, &width);

要从字符串中提取字符(而不是input.charAt(i)):

char c = buffer[i];

这不是文件 I/O;它只是从字符串中获取字符的 C 语法。


似乎您在 Java 中有一个函数,它返回一个动态分配的二维数组(字符?字符串?)。Java 支持在数组对象本身中记录宽度和高度,而 C 不支持这一点。而不是二维数组,您将不得不使用struct

struct MyDataFromFile
{
    int height, width;
    bool **data;
};

这种数据结构只是一种可能的选择;您可以使用不同的选项:

  • bool[MAX_HEIGHT][MAX_WIDTH]- 如果有最大高度和宽度很方便
  • uint64_t *data如果您想使用 1 位而不是 1 字节进行存储 - 这需要额外的位摆弄
于 2013-10-19T21:14:38.083 回答