繁体   English   中英

如何从 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 图像,这基本上意味着首先打印最后一个字符,然后在第二个 position 中打印最后一个字符,依此类推。

该文件包含 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]);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM