我正在尝试编写一个关于在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
是否可以在不改变现有代码的情况下使波形水平?谢谢!
答案 0 :(得分:1)
我写了一个问题的答案,这个问题很有效,也许并不像你期望的那样完整,但它应该足以让你使用
请注意以下事项:
逻辑behine我的例子就是这样:
#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