如何从 ASCII 图像文件(这是一个使用 ASCII 字符显示图像的文本文件)中扫描字符并使用 C 反转打印图像?

How to scan characters from an ASCII image file(which is a text file that shows an image using ASCII characters) and print the image inverted using C?

所以我有一个包含 ASCII 图像的 .txt 文件。我必须将该文件扫描到 C 程序中并打印反转的 ASCII 图像,这基本上意味着首先打印最后一个字符,然后在第二个位置打印倒数第二个字符,依此类推。

文件共30行,每行100个字符。这就是我给字符串数组值 3100 的原因。我想如果我使用倒循环并倒转打印字符,就可以解决问题,但它并没有这样做。

所以我不知道这里有什么问题。另外,我对 C 非常天真,这是我在这里的第一个问题。因此,如果我在提出问题时有任何错误,请原谅我。如果你能给我一个解决这个问题的代码并向我解释,那就太好了。我是 C 的新手,所以我可能不理解复杂的代码。并且还建议我需要学习哪些概念来处理此类问题。谢谢你。

这是我的代码 -

#include<stdio.h>
int main (){
char str[3100];
int i;
FILE *output=fopen("output.txt", "w");
FILE *input=fopen("input.txt", "r");
for(i=0;i<3000;i++)
{
    fscanf(input, "%s", &str[i]);
}
for(i=3000;i>0;i--)
{
    fprintf(output, "%c", str[i]);
}
return 0;

}

您正在扫描字符串而不是字符。包括换行符在内的 ASCII 图像长度是否恰好为 3000 个字符?您最好在 while 循环中检查 EOF。您还缺少第二个 for 循环中的最后一个字符:

[...]
fscanf(input, "%c", &str[i]);
[...]
for(i=2999;i>=0;i--)
{
    fprintf(output, "%c", str[i]);
}
return 0;

您似乎输入了 3000 个字符,所以我猜您正在尝试输入 3000 个字符。但是在 scanf 中,您使用了 %s,它会使用多个字符,直到它获得一个转义字符。你应该做到 %c。因此,该行变为 fscanf(input, "%c", &str[i]);

但是,您提到此文件包含的图像不太可能是一维字符数组。图像最多可以是一个二维网格,所以即使按照你给出的反转定义,你也应该输出一个二维网格(如果我没有遗漏什么的话)。