【问题标题】:print an underscore character in place of integer 0 [closed]打印下划线字符代替整数 0 [关闭]
【发布时间】:2016-12-10 14:16:56
【问题描述】:

我正在制作 15 岁的游戏,因此实现了在终端上打印出棋盘的绘图功能。我的功能如下:

void draw(void)
{
    for(int i=0;i<d;i++)
    {
        for(int j=0;j<d;j++)
        {
            if (board[i][j] != 0)
            {
                printf("%2d ", board[i][j]);
            }
            else
            {
                printf(" _ ");
            }
        }
    printf("\n");
    }
}

它适用于高达 3X3 的板,但对于 4X4 的板,它会打印出以下内容:

在第二行的第二列中,它打印 1,而我希望它打印 10。

【问题讨论】:

  • 为什么不向函数传递参数?使用全局变量是你应该从一开始就避免使用的东西。经验越少,全局变量就越危险,但不熟练的程序员比专家更常使用它们。
  • 其实,that's not what your code prints. 请提供您遇到问题的确切代码,并清楚描述其输出的问题所在。
  • 你实际上并没有提出问题。
  • 另外,我认为它在 3x3 板上工作得很好。 4x4到底有什么问题?需要换成"%3d"吗?
  • @iharob 在第二行的第二列中打印 1 而我希望它打印 10

标签: c arrays for-loop multidimensional-array cs50


【解决方案1】:

您可以找出单元格编号的最大长度,并使用它来格式化printf

char numstr[20];
int maxlen = sprintf(numstr, "%d", d * d - 1);
...
printf("%*d ", maxlen, board[i][j]);
...
printf("%*c ", maxlen, '_');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2018-05-24
    • 2016-09-20
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2016-11-02
    • 2013-03-20
    相关资源
    最近更新 更多