【问题标题】:Create a 2D array from a 1D array从一维数组创建一个二维数组
【发布时间】:2019-03-06 17:56:42
【问题描述】:

正如标题中所说,我有一个函数“load”,它返回一个包含 2 个 int 和一个字符数组的结构。这个数组是一维的,看起来像: [################ ### $ $ ### # .# ### 。 #.@ ###$# * ### ################] 我想将其打印为:

##########
######  ##
# $  $  ##
# #  .# ##
#  . #.@ #
##$# *   #
##  ######
##########

知道这里的宽度是 10。 所以我的问题是如何,每 10 个字符,设法回到下一行......? 这是我到目前为止所写的:

void print_map(map map_loaded){
    char *p=map_loaded.p_char;
    int height=map_loaded.height;
    for(int i=0; i<height; i++){
            printf("%c", *p[i]);
        }

如您所见,我只知道如何阅读每个字符,但我不知道如何回到行... 如果有人能阅读我的代码并给我他/她的反馈,我将不胜感激......提前致谢!

【问题讨论】:

  • 您应该展示您的map 结构是如何定义的,并解释这些字段的含义。例如:map_loaded.height 是打印网格中的行数吗? map_loaded.p_char 是空终止的吗? map 结构中还有哪些其他数据成员?
  • 打印 '\n' 换行。
  • *p[i] 不好! 不管你怎么看...*p 的类型为char;你不能索引一个字符...p[i] 的类型为char;你不能取消引用一个字符。
  • @pmg 您能否详细说明取消引用字符的问题所在。我以前没听说过这是个问题。
  • @Patrick:你认为*(42)(取消引用整数42)合法吗? *("foo")(取消引用(字符串转换为)指针)呢?还是*("foo"[2])(取消引用一个字符)?

标签: c arrays 2d


【解决方案1】:

因为您只需要在每 10 个字符后换行,只需检查自上次添加新行以来您是否打印了 10 个字符。

void print_map(map map_loaded){
char *p=map_loaded.p_char; 
int height=map_loaded.height; 
for(int i=0; i<height; i++){ 
printf("%c", p[i]);

if( (i+1)%10==0)
printf("\n");
}

【讨论】:

  • *p[i] 不好! 不管你怎么看...*p 的类型为char;你不能索引一个 char ...p[i] 的类型为 char;你不能取消引用一个字符。
猜你喜欢
  • 2016-12-27
  • 2023-01-04
  • 2013-07-16
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多