C打印形状:无法添加反斜杠

时间:2015-02-13 10:45:44

标签: c

我正在尝试打印这个形状:

###/\###
##/  \##
#/    \#
/      \
\      /
#\    /#
##\  /##
###\/###

这是我写的代码:

#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()

的主体

提前致谢!

2 个答案:

答案 0 :(得分:3)

C(以及许多其他语言)中的反斜杠是一种特殊的&#34;转义&#34;字符。例如 - \ n表示换行符。 如果你想要一个文字反斜杠,你也需要使用反斜杠转义它 - 所以"\\"将编码单斜杠。

答案 1 :(得分:1)

我看到了两个问题:

  1. 在代码中没有用于打印正斜杠或反斜杠的代码。我认为你应该在打印空格的循环之前/之后添加printf("/");printf("\\");

  2. 要打印换行符,您需要printf("\\n"); - 请注意反斜杠。

  3. 话虽这么说,我在你的问题评论中提到形状是对称的,所以它可以重复使用代码画上半部分画下半部分。我提到打印单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增加值,然后减少下半部分的值。唯一改变的是用于左/右侧的斜杠类型。