我正在努力学习C并决定从Java中移植我的Game of Life代码。除了FileIO部分外,它似乎并不太难。我的输入文件类似于:
Beehive
5 6
------
--XX--
-X--X-
--XX--
------
这是我在Java中所做的pseduo代码;
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 ) {
}
}
我不确定如何从这里开始?任何人都可以给我一个指针,从哪里开始?
答案 0 :(得分: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中有一个函数返回一个2-D数组(字符串?的字符串?),它是动态分配的。 Java支持在数组对象本身中记录宽度和高度,而C不支持此。您必须使用struct
:
struct MyDataFromFile
{
int height, width;
bool **data;
};
这种数据结构只是一种可能的选择;你可以使用不同的选项:
bool[MAX_HEIGHT][MAX_WIDTH]
- 如果有最大高度和宽度,则很方便uint64_t *data
如果你想使用1位存储而不是1字节 - 这需要额外的位功能