如何在没有graphics.h的情况下在C中生成水平正弦文本?

时间:2018-03-10 20:51:02

标签: c sine math.h

我正在尝试编写一个关于在C中生成正弦文本的程序。我尝试了下面的代码,得到了一个垂直的正弦波。是否有可能使其水平?我是C编程的新手,所以如果可以,请以最简单的方式解释代码。谢谢!

#include <stdio.h>
#include <math.h>


int main()
{
    // declarations
    int x;
    char y[80];
    char str[] = "This is a test string";
    // setting entire array to spaces
    for(x = 0; x < 79; x++)
        y[x] = ' ';
    y[79] = '\0';

    // print 20 lines, for one period (2 pi radians)
    for(x = 0; str[x]!='\0'; x++)
    {
        y[40 + (int) (40 * sin(M_PI * (float) x /10))] = str[x];
        printf("%s\n", y);
        y[40 + (int) (40 * sin(M_PI * (float) x / 10))] = ' ';
    }

    // exit
    return 0;
} 

输出:

                                   T                                      
                                                    h                          
                                                               i               
                                                                        s      


                                                                              s

                                                               a               

                                        t                                      
                            e                                                  
                 s                                                             
        t                                                                      

s                                                                              
  t                                                                            
        r                                                                      
                 i                                                             
                            n                                                  
                                        g               

是否可以在不改变现有代码的情况下使波形水平?谢谢!

1 个答案:

答案 0 :(得分:1)

我写了一个问题的答案,这个问题很有效,也许并不像你期望的那样完整,但它应该足以让你使用

请注意以下事项:

  • 在您写入控制台\文件后,很难返回并更改打印值
  • 您必须定义您的desiered输出矩阵并在打印任何内容之前准备整个输出

逻辑behine我的例子就是这样:

  1. 创建一个矩阵(80 * 22)
  2. 用空格填充矩阵
  3. 按列填充矩阵
  4. 用char打印整个矩阵;
  5. #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
        // declarations
        int col, row;
        char str[] = "This is a test string";
    
        /* define the screen for print (80 width * 22 length)*/
        char printout[80][22];
    
        // setting entire matrix to spaces
        for (row=0; row < 22 ; row++)
        {
            for(col = 0; col < 80; col++)
                printout[col][row] = ' ';
        }
    
        /* fill in the columns modulo the string to allow continuous output */
        for(col = 0; col < 80 ; col++)
        {
            printout[col][10 + (int) (10 * sin(M_PI * (float) col /10))] = str[( col % strlen(str) )];
        }
    
        /* printout the entire matrix formatted */
        for (row = 0 ; row < 22 ; row++) {
            for (col = 0 ; col < 80 ; col++) {
                printf("%c", printout[col][row]);
            }
            printf("\n");
        }
        // exit
        return 0;
    } 
    

    在此代码中有许多要纠正的事情 - 行应该考虑字符串的大小,您应该将其解析为string而不是char等。 但它又一次给你你想要的东西,它可以帮助你继续......

                   s                                       t                   s    
                    t                 t s                 s                   e t   
                 t   r               s   t               e   s               t      
    
    
                s     i             e     r             t     t                   s 
    
               e       n           t       i                   r           a       t
    
    
    T         t         g                   n         a         i                   
    
    
     h                   T       a           g                   n       s          
    
      i     a             h                   T     s             g     i           
    
    
       s                   i   s               h   i               T                
          s                 s i                 i                   h s             
         i                                       s                   i