gpt4 book ai didi

c - 如何使用 C 将二维数组写入文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:08 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序必须将 ASCII 图片(每一行都有不同的长度)存储在二维数组中,然后再次打印出来。要么我必须在“\n”处剪切数组,要么我必须创建一个具有动态大小的数组。这是我到目前为止所拥有的。它以正确的方式打印出来,但每行有 255 个字符。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_LENGTH 255

int main(void) {
FILE *iFile, *oFile;
char elements[MAX_LENGTH][MAX_LENGTH];
memset(elements, 0, MAX_LENGTH);
int zeile = 0, position = 0, size = 0;
char c;
bool fileend = false;

//open files
iFile = fopen("image.txt", "r");
oFile = fopen("imagerotated.txt", "w+");

if ((iFile == NULL) || (oFile == NULL))
{
perror("Error: File does not exist.");
exit(EXIT_FAILURE);
}


//read File to a 2D-Array
while (1) {
if ((c = fgetc(iFile)) != EOF) {
if (c == '\n') {
zeile++;
position = 0;
}
elements[zeile][position] = c;
position++;
}
else {
fileend = true;
}

if (fileend == true) {
break;
}
}

//Write 2D-Array into the output file
fwrite(elements, MAX_LENGTH, MAX_LENGTH, oFile);

fclose(iFile);
fclose(oFile);

return EXIT_SUCCESS;
}

所以我的问题是打印出数组并在“\n”处剪切每一行的最佳解决方案是什么? (或者创建一个具有动态长度/大小的数组)。

我考虑过创建一个 int countRows 并在 fileend 变为 true 时从“zeile”获取数字,但我如何获取 countColoumns?

主要目标是以 90 度步长旋转 ASCII 图像,但我停留在输出上。所以我必须使用二维数组,这样我才能轻松交换字符。感谢您的帮助。

最佳答案

我,

你可以尝试制作一个像这样的函数原型(prototype):

char **myFileToArray(char *contentOfFile);

此函数的目的是创建一个包含图片每一行的数组。在此函数中,您计算​​行数(= '/n' 的数量),您创建一个具有此大小的动态数组。对于数组的每个维度,您动态分配行的长度加上 '/0' 的长度。您将行复制到维度中,并将“/0”放在维度的每一端。在此之后你可以返回你的数组。

例如,如果您的文件是:

1.      /\_/\
2. =( °w° )=
3. ) ( //
4. (__ __)//

你将得到一个大小为 5 的数组,组成如下:

array[0] = "  /\_/\"
array[1] = "=( °w° )="
array[2] = " ) ( //"
array[3] = " (__ __)//"
array[4] = "/0"

对于打印,您可以创建另一个函数来写入数组并将每个“/0”替换为“/n”。

这个解决方案有点复杂,但我认为它仍然是一个干净的解决方案。

我希望我的解释很清楚,对不起我的英语不好,我会努力提高!

关于c - 如何使用 C 将二维数组写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33845615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com