如果我有一个选项文件:
size = 4
data = 1100010100110010
我有一个2d大小*大小的数组,我想填充数据中的值,这是最好的方法吗?
为了澄清,对于我的例子,我想要一个这样的数组:
int [4] [4] array = {{1,1,0,0},{0,1,0,1},{0,0,1,1},{0,0,1, 0}}。 (不是真正的代码,但你明白了。)
大小可以是任何数字。
我想我必须读取大小,maloc数组,然后读取一个充满数据的字符串然后循环遍历数据中的每个字符,将其转换为int并将其粘贴到相应的指数?但是我真的不知道该如何去做,已经找了一段时间没有运气。
任何帮助都会很酷! :)
答案 0 :(得分:0)
循环。
FILE *fp = fopen("waaa.txt", "r");
if(fp == null) { /* bleh */ return; }
int j = 0;
while(char ch = fgetc(fp)) {
for(int i = 0; i < 4; ++i) {
array[j][i] = ch;
}
++j;
}
我不确定fgetc()语法..只需检查它。它一次读取一个字符。
答案 1 :(得分:0)
int process_file(int **array, char const *file_name)
{
int size = 0;
FILE *file = fopen(file_name, "rt");
if(fp == null)
return -1;//can't open file
char line[1024]; //1024 just for example
if(fgets(line, 1024, file) != 0)
{
if(strncmp(line, "size = ", 7) != 0)
{
fcloes(file);
return -2; //incorrect format
}
size = atoi(line + 7);
array = new int * [size];
for(int i = 0; i < size; ++i)
array[i] = new int [size];
}
else
{
fclose(file);
return -2;//incorrect format
}
if(fgets(line, 1024, file) != 0)
{
if(strncmp(line, "data = ", 7) != 0)
{
fcloes(file);
for(int i = 0; i < size; ++i)
delete [] array[i];
delete [] array;
return -2; //incorrect format
}
for(int i = 7; line[i] != '\n' || line[i] != '\0'; ++i)
array[(i - 7) / size][(i - 7) % size] = line[i] - '0';
}
else
{
fclose(file);
for(int i = 0; i < size; ++i)
delete [] array[i];
delete [] array;
return -2; //incorrect format
}
return 0;
}
在程序结束前不要忘记删除数组;