2016-11-26 14 views
0

これは私が持っているコードです。画像を印刷する機能と、反転する機能の2つの機能があります。私はポインタと配列では良くない。関数は配列を返さないので、私はポインタとして配列を返さなければならないことを理解しています。だから、私はどちらが間違いか分からない。私は関数を使わずにそれを行う方法を知っていますが、別の関数でそれを行う必要があります。私は画像を印刷するとき(はい、それはピカチュウです)、私はファイルから保存し、正しく保存されているかどうかを確認するために印刷しますが、それを反映すると、いくつかのランダムな文字が印刷されます。これはピカチュウです。「イメージ反映」プログラム(実際のイメージではなく、文字で描かれた図面を反映します)

          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 ║║P0 ¡ⁿrt É :::: h╗ -/::::/: `:::::::::::::::::::::::. |▌`wyæst X╗` ╪╗` Ü╪«$ ä╗` ╛·rt @╗` ╚╓` P╓vt╩Q│P■   É╓` 9▌⌠v ╪╗` ░╗` ╟α⌠v:::: $ ╫` ╫` +/:/:::::::::::::::::::::::::/ `::::::::::::::::::::::::::/` `::::::::://///:::::://////. .-/:////::---.````...////:://-` .:/::/::-. ...-。 `

causiは何ですかこれは、逆のchar配列を送信して保存する方法であると確信しています。しかし、私はそれをどのように修正するか分かりません。

#include<stdio.h> 
#include<string.h> 
#define S 100 

char** Reverse(char str[S][S],int i); 
void printImage(char str[S][S],int i); 
int main() 
{ 
    int i=0; 
    FILE *fp; 
    char buf[S],buf2[S][S],**refpic; 
    fp = fopen("pikachu.txt","r"); 
    while(fgets(buf, 100, fp) != NULL) 
    { 
     strcpy(buf2[i],buf); 
     i++; 


    } 
    fclose(fp); 



    printImage(buf2,i); 

    refpic=Reverse(buf2,i); 
    strncpy(refpic,buf2,S); 
    printImage(refpic,i); 

    return 0; 
} 
char** Reverse(char str[S][S],int i) 
{ 
    int a=0,b=0; 
    char refpic[S][S]; 

    for(a=0;a<i;a++) 
    { 

     for(b=0;b<100;b++) 
     { 

      refpic[a][b]=str[a][99-b]; 
     } 
    } 

    return refpic; 
} 
void printImage(char str[S][S],int i) 
{ 
    int a=0,b=0; 


    for(a=0;a<i;a++) 
     { 
      for(b=0;b<100;b++) 
      { 
       printf("%c", str[a][b]); 
      } 
     } 

} 
+0

へようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

答えて

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) 

我々はshouldn 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アートを逆転することは常に良い考えではないことに注意してください...

+0

OK、私は新しいお気に入りのaardvarkを持っています... –

関連する問題