如何扫描ASCII图像文件(使用ASCII字符显示图像的文本文件)中的字符并使用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;

}

Vou 正在扫描字符串而不是字符。ASCII 图像的长度是否正好为 3000 个字符,包括换行符?您最好在一段时间循环中检查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]);

但是,您已经提到此文件包含的图像不太可能是一维字符数组。图像最多可以是 2D 网格,因此即使按照您给出的反转定义,您也应该输出 2D 网格(如果我没有遗漏某些内容(。

最新更新