晚上好, 我的任务是创建一个带有框架消息的动态菱形。 我现在一直在寻找一种方法来做几个小时,但老实说,我开始迷失自己的想法。
请注意,我的关卡非常基础,所以我的代码不包含任何复杂的材料。
我设法创建了Rhombus的上半部分,但我不知道如何准确地将消息传递到它的中间。
用户应该能够输入框架的字符串,大小和字符。 F.ex:
用户输入是:
5,$,你好:
$
$ $
$ $
$ $
$ Hello $
$ $
$ $
$ $
$
到目前为止我的代码(很少有未引用的变量,忽略它们):
void framedMessage()
{
int size = 6, i, sp, sym, a, b;
char rSymbol = '$', str[100] = { "Hello" };
//while ((strlen(str) % 2) == 0)
//{
// puts("Please Enter a string (even number of letters will be denied):");
// gets(str);
//}
//puts("Please enter a char for the rhombus(NOTE that the letters 'C','M','S','P','E' will return as small chars and not capital:");
//rSymbol = charInput();
//size = numericalInput(strlen(str) + 2, 999);
for (a = 0;a <= size;a++)
{
for (sp = 1;sp <= size;sp++)
{
if (sp == size && a == 0)
printf("%c", rSymbol);
if ((sp == size - a && a != 0))
{
printf("%c", rSymbol);
for (;sp < size + a;sp++)
{
printf(" ");
if (sp == size + a -2)
printf("%c", rSymbol);
}
}
printf(" ");
}
puts("");
}
}
菱形的上半部分并不那么难,但现在我不知道如何将信息放在一个完全适合空间的方式(请记住,字符串不能有偶数个字符,因为它会破坏菱形。)
我将不胜感激任何帮助。
。关于代码本身的建设性帖子(我应该尝试改进什么,避免使用等等。)非常感谢。
答案 0 :(得分:0)
因为在这个例子中你使用了6作为大小。两个'$'之间的下一行中的空格总数将为11.即变量大小-1的值的两倍。所以你得到字符串的长度并使用下面的逻辑将字符串放在中间。
len = strlen(str);
x = ( (size*2-1) - len)/2
在x的情况下将是3 x str之前和之后不需要空格。