我正在尝试打印这个形状:
###/\###
##/ \##
#/ \#
/ \
\ /
#\ /#
##\ /##
###\/###
这是我写的代码:
#include<stdio.h>
void main()
{
int totalRows = 5;
int row, colSpace, colStar, i;
for (i = 1; i <= 2 * totalRows - 1; i++)
{
printf("#");
}
printf("n");
for (row = 1; row <= totalRows; row++)
{
for (colSpace = totalRows - row; colSpace >= 1; colSpace--)
{
printf("#");
}
for (colStar = 1; colStar <= 2 * row - 1; colStar++)
{
printf(" ");
}
for (colSpace = totalRows - row; colSpace >= 1; colSpace--)
{
printf("#");
}
printf("n");
}
for (row = totalRows - 1; row >= 1; row--)
{
for (colSpace = 1; colSpace <= totalRows - row; colSpace++)
{
printf("#");
}
for (colStar = 1; colStar <= 2 * row - 1; colStar++)
{
printf(" ");
}
for (colSpace = 1; colSpace <= totalRows - row; colSpace++)
{
printf("#");
}
printf("n");
}
for (i = 1; i <= 2 * totalRows - 1; i++)
{
printf("#");
}
}
通过上面的代码我们得到没有破折号的数字。我如何获得它们?我已经尝试添加它们但我无法在需要的地方获取它们。我无法将反斜杠插入printf()
的主体提前致谢!
答案 0 :(得分:3)
C(以及许多其他语言)中的反斜杠是一种特殊的&#34;转义&#34;字符。例如 - \ n表示换行符。
如果你想要一个文字反斜杠,你也需要使用反斜杠转义它 - 所以"\\"
将编码单斜杠。
答案 1 :(得分:1)
我看到了两个问题:
在代码中没有用于打印正斜杠或反斜杠的代码。我认为你应该在打印空格的循环之前/之后添加printf("/");
或printf("\\");
。
要打印换行符,您需要printf("\\n");
- 请注意反斜杠。
话虽这么说,我在你的问题评论中提到形状是对称的,所以它可以重复使用代码画上半部分画下半部分。我提到打印单row
的某些函数会很有用。这就是我的想法:
#include <stdio.h>
/* Could have been passed to printRow() instead of using a global variable. */
int totalRows = 4;
void printRow( int row, char leftSlash, char rightSlash )
{
int i;
/* A couple of variables to aid readability. */
int totalWidth = totalRows * 2;
int numSpaces = row * 2;
int numHashes = totalWidth - numSpaces - 2;
for ( i = 0; i < numHashes / 2; ++i ) {
printf( "#" );
}
printf( "%c", leftSlash );
for ( i = 0; i < numSpaces; ++i ) {
printf( " " );
}
printf( "%c", rightSlash );
for ( i = 0; i < numHashes / 2; ++i ) {
printf( "#" );
}
printf( "\n" );
}
int main()
{
int i;
for ( i = 0; i < totalRows; ++i ) {
printRow( i, '/', '\\' );
}
for ( i = totalRows - 1; i >= 0; --i ) {
printRow( i, '\\', '/' );
}
return 0;
}
注意程序如何首先调用printRow
增加值,然后减少下半部分的值。唯一改变的是用于左/右侧的斜杠类型。