【问题标题】:Need to write spiral from # and [closed]需要从#和[关闭]写螺旋
【发布时间】:2018-12-20 10:17:01
【问题描述】:

我必须从#. 创建螺旋。它必须根据变量n 进行扩展。问题是我无论如何尝试都无法创建它。到目前为止,我的程序在测试中遇到了分段错误。在描述图像中输出n = 7

有人可以帮忙吗?

char a[100][100];
int n = 7;
int r,s;

void write(char *a[], int n)
{
  int i, j;
  for (i=0;i<n;i++)
  {
    for (j=0; j<n;j++)
      a[i][j]=".";
  }
}

void right (int length)
{
  int k=0;
  for (k=0;k<length;k++)
    a[r][s+k] = '#';
}

void down(int length)
{
  int k=0;
  for (k=0;k<length;k++)
    a[r][s+k] = '#';
}

void up(int length)
{
  int k=0;
  for (k=0;k<length;k++)
    a[r][s+k] = '#';
}

void left(int length)
{
  int k=0;
  for (k=0;k<length;k++)
    a[r][s+k] = '#';
}

【问题讨论】:

  • 您在此处将字符串分配给 char 数组 a[i][j]=".";您需要像这样分配一个字符 a[i][j]='.';
  • 忽略 scanf() 的返回值,后果自负。考虑不要,
  • 为什么updownleftright的功能都一样?
  • 检查你的作业。此作业通常由教师创建,但有限制不要使用和排列,而是一次性直接打印行。

标签: c spiral


【解决方案1】:

回答您关于分段错误的问题:

正如我在 cmets 中提到的,您需要将 "." 从字符串更改为字符,例如 '.'

接下来是在您的 write 函数中,参数需要错误类型的数组。当您需要 char a[100][100] 时,您指定了 char *a[]。这对我有用。

关于预期的行为,由您决定如何定义螺旋。

【讨论】:

  • 全局变量初始化为0。
  • 没有帮助,仍然出现分段错误
  • @interjay 我的错,我忽略了这一点
  • @Dudo 更新了答案
  • 效果很好,谢谢。但不打印任何东西。如果我想打印结果,我应该使用 2 个循环来打印整个数组,对吗?
【解决方案2】:

每当您访问数组时,您的程序都会在 write() 函数中出现分段错误。这样就需要在 write() 函数中复制整个数组。请在下面使用。 写(*a[100][100],int n)

【讨论】:

  • 在写函数签名/调用中尝试做的事情没有意义
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多