这是我的代码。有两个功能,一个用于打印图像,另一个用于反转。我对指针和数组并不擅长。我知道我必须将数组作为指针返回,因为函数不返回数组。所以我不知道哪些是错误。我知道如何在不使用函数的情况下完成它,但我必须使用单独的函数来完成它。当我打印图像时(是的它是皮卡丘)我将它从文件中保存并打印出来以查看它是否正确保存,是的确如此,但在反映它时会打印出一些随机字符。这是皮卡丘。
so
sNm
.yhyo/-` yNNN
`sNNNNh:-.` :sdNN
.yNNh:::::-. -:::/s
.sh::::::::-. `:::::-
`.:/::::::::. ` -:::::.
`.-:/:::::::::::::-.` ::::::
``-:::::::::::::::-.::::/.
.:::::::::::::::::::::/:
.::oh//:::::::::::::::::`
.:::ymy+::::::::::::::::.
.oo:::::::::/:::::o/yo::/
`ooo/::::+osss+::::ommo::-
`oo+:::::++///oyo:::::::/`
-/::::::/:::::+/:::::/++.--::::.
``.:/:::::/::::/:::::/ooo+:::::::/`
`-::::::::::::/:/:::::::+oo/:::::://:```
`/::::::::::::/:::::::/::/::::::::/::::::::::--.`
::::::::::::://:::::::::::::::::/:::::::::::::::::--.`
`:///:::::////::::::::::::::/:. :::/:::::::::::::::::::`
`-/////:::::::::::::::://:. .:://///::::::::::::::.
:::::::::::::::::::::::` :://///////::::::::-.
-::::::::::::::::::::::. ----:://: `.--::/::-`
.:::::::::::::::::::::::` :/::::/- ``
`::::::::::::::::::::::::. :+/--:.
-::::::::::::::::::::::::+ossy
/:::::::::::::::::::::::::/:/+
`/::::::::::::::::::::::::::`
.//////:::::://///:::::::::`
`-//::////...````.---::////:/-.
`.-...`` .-::/::/:.
``.-.
打印出来:
os
mNs
NNNy `-/oyhy.
NNds: `.-:hNNNNs`
s/:::- .-:::::hNNy.
-:::::` .-::::::::hs.
.:::::- ` .::::::::/:.`
:::::: `.-:::::::::::::/:-.`
./::::.-:::::::::::::::-``
:/:::::::::::::::::::::.
`::::::::::::::::://ho::.
.::::::::::::::::+ymy:::.
/::oy/o:::::/:::::::::oo.
-::ommo::::+ssso+::::/ooo`
`/:::::::oyo///++:::::+oo`
.::::--.++/:::::/+:::::/::::::/-
`/:::::::+ooo/:::::/::::/:::::/:.``
```://::::::/oo+:::::::/:/::::::::::::-`
`.--::::::::::/::::::::/::/:::::::/::::::::::::/`
.--:::::::::::::::::/::::::::::::::::://:::::::::::::
:::::::::::::::::::::::::::::::::::::::: // // ::::: ///:
.:::::::::::::://///::. .://:::::::::::::::://///-
.- :::::::: ///////// :: :::::::::::l▌
w£ⁿrtÉX║ P
║0 ¡ⁿrt
╗ É ::::
╗{ {1}}
h╗
......-。`
造成这种情况的原因,我确定它是如何发送和保存反向字符数组的。但我不知道如何解决它。
-/::::/: `:::::::::::::::::::::::.
|▌`wyæst X╗` ╪╗` Ü╪«$ ä╗` ╛·rt @╗` ╚╓` P╓vt╩Q│P■ É╓` 9▌⌠v ╪╗` ░╗` ╟α⌠v:::: $ ╫` ╫`
+/:/:::::::::::::::::::::::::/
`::::::::::::::::::::::::::/`
`::::::::://///:::::://////.
.-/:////::---.````...////:://-`
.:/::/::-.
答案 0 :(得分:0)
主要问题似乎是你的程序分配了一个最大线宽(100),读取的行比那个短(66),然后尝试根据最大宽度反转读取的行,基本上是复制垃圾。您需要使用实际宽度,或使用空格或两者填充到最大值。
另一个问题是你对最大宽度和最大高度都使用相同的值#define S 100
,这是不现实的,然后不要在代码中使用它:
char buf[S],buf2[S][S],**refpic;
while(fgets(buf, 100, fp) != NULL)
strncpy(refpic,buf2,S);
for(b=0;b<100;b++)
refpic[a][b]=str[a][99-b];
void printImage(char str[S][S],int i)
我们不应该看到任何100(或99)。
您似乎也假设图像将在右侧填充空间,这并不总是使用ASCII艺术。并且不清楚你是否在逆转中正确处理尾随换行符。下面是我的工作,解决上述问题和一些风格调整:
#include <stdio.h>
#include <string.h>
#define MAX_LINES 200
#define MAX_COLUMNS 100
void printImage(char image[][MAX_COLUMNS], int n_lines, int n_cols)
{
for (int a = 0; a < n_lines; a++)
{
for (int b = 0; b < n_cols; b++)
{
putchar(image[a][b]);
}
putchar('\n');
}
}
void reverseImage(char image[][MAX_COLUMNS], char reverse[][MAX_COLUMNS], int n_lines, int n_cols)
{
for (int a = 0; a < n_lines; a++)
{
for (int b = 0; b < n_cols; b++)
{
reverse[a][b] = image[a][n_cols - b - 1];
}
}
}
int main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1], "r");
char buf2[MAX_LINES][MAX_COLUMNS];
int row = 0, columns = 0;
while (fgets(buf2[row], MAX_COLUMNS, fp) != NULL)
{
size_t length = strlen(buf2[row]) - 1;
if (length > columns)
{
columns = length;
}
for (int j = length; j < MAX_COLUMNS - 1; j++)
{
buf2[row][j] = ' ';
}
buf2[row][MAX_COLUMNS - 1] = '\0';
row++;
}
fclose(fp);
printImage(buf2, row, columns);
char refpic[MAX_LINES][MAX_COLUMNS];
reverseImage(buf2, refpic, row, columns);
printImage(refpic, row, columns);
return 0;
}
示例强>
> ./a.out aardvark.txt
,__ _, ___
'.`\ /`| _.-"``` `'.
; | / .' `}
_\|\/_.-' }
_.-"a { }
.-` __ /._ { }\
'--"` `""` `\ ; { } \
| } __ _\ }\ \
| /;` / :. }` \ \
| | | .-' / / / '. '._
jgs .'__/-' ````.-'.' '-._'-._
``` ```` `"""`
___ ,_ __,
.'` ```"-._ |`/ \`.'
}` '. / | ;
} '-._/\|\_
} { a"-._
\} { _./ __ `-.
\ } { ; \` `""` `"--'
\ \} \_ __ } |
\ \ `} .: / `;/ |
_.' .' / / / '-. | | |
_.-'_.-' '.'-.```` '-/__'. sgj
`"""` ```` ```
>
请注意,反转ASCII艺术并不总是一个好主意......