疯狗马德森 发表于 2023-12-1 14:55:19

28节课后题求助大神点拨

请问我这样编写把fish横向打印,哪里不对,如何修改?想用指针但还是懵懵的

#include <stdio.h>

int main()
{
    int i,j,k;
    char str={{
      "########",
      "##      ",
      "##      ",
      "######",
      "##      ",
      "##      ",
      "##      "
    },
    {
      "####",
      " ## ",
      " ## ",
      " ## ",
      " ## ",
      " ## ",
      "####"
    },
    {
      " ###### ",
      "##    ##",
      "##      ",
      " ###### ",
      "      ##",
      "##    ##",
      " ###### "
    },
    {
      "##    ##",
      "##    ##",
      "##    ##",
      "########",
      "##    ##",
      "##    ##",
      "##    ##"
    }};
      
    char *p=&str;
    for (i=0;i<7;i++)
    {
      for (j=0;j<4;j++)
      {
            printf("%s",*p);
      }
    }

   
   

   
    return 0;
}

FishC_GPT 发表于 2023-12-1 14:55:43

您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次,您在使用`for`循环打印字符时,只打印了第一行的字符,没有把整个鱼的图案打印出来。

以下是修正后的代码示例:

#include <stdio.h>

int main()
{
    int i, j, k;
    char str = {
      {
            "########",
            "##      ",
            "##      ",
            "######",
            "##      ",
            "##      ",
            "##      "
      },
      {
            "####",
            " ## ",
            " ## ",
            " ## ",
            " ## ",
            " ## ",
            "####"
      },
      {
            " ###### ",
            "##    ##",
            "##      ",
            " ###### ",
            "      ##",
            "##    ##",
            " ###### "
      },
      {
            "##    ##",
            "##    ##",
            "##    ##",
            "########",
            "##    ##",
            "##    ##",
            "##    ##"
      }
    };

    for (i = 0; i < 4; i++) {
      for (j = 0; j < 7; j++) {
            printf("%s\n", str);
      }
      printf("\n");
    }

    return 0;
}

这样修改后,可以将整个鱼的图案打印出来。注意,`str`数组定义为 `char str`,表示有4种不同的鱼的图案,每种图案有7行9列的字符。外层的两个循环遍历四种鱼的图案,内层的循环打印每一行的字符。

希望对您有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

疯狗马德森 发表于 2023-12-1 15:01:53

FishC_GPT 发表于 2023-12-1 14:55
您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次, ...

横向打印四个字母fish,应该是这样
    for (i=0;i<7;i++)
    {
      for (j=0;j<4;j++)
      {
            printf("%s",str);
      }
      printf("\n");
    }

谢谢GPT

FishC_GPT 发表于 2023-12-1 15:02:08

疯狗马德森 发表于 2023-12-01 15:01
横向打印四个字母fish,应该是这样
    for (i=0;i

如果您想横向打印字母"fish",可以尝试以下代码:

++
#include <iostream>
using namespace std;

int main() {
    char letters = {'f', 'i', 's', 'h'};
   
    for (int i = 0; i < 4; i++) {
      cout << letters << " ";
    }
   
    return 0;
}

以上代码定义了一个字符数组 `letters` 存储了四个字母 'f', 'i', 's', 'h'。然后使用循环遍历数组,并在每个字母后面加一个空格输出。这样就实现了将字母 "fish" 横向打印的效果。希望能帮到您!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

疯狗马德森 发表于 2023-12-1 15:04:32

FishC_GPT 发表于 2023-12-1 14:55
您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次, ...

如果把字符串定义成一个二维数组char str=。。。,再定义一个指针指向这个字符串数组的话,请问这个如何定义指针?

FishC_GPT 发表于 2023-12-1 15:04:48

疯狗马德森 发表于 2023-12-01 15:04
如果把字符串定义成一个二维数组char str=。。。,再 ...

如果要定义一个指向二维字符数组的指针,您可以使用以下语法:str[] = {    {      "########",      "##      ",      "##      ",      "######",      "##      ",      "##      ",      "##      "    },    {      "####",      " ## ",      " ## ",      " ## ",      " ## ",      " ## ",      "####"    },    {      " ###### ",      "##    ##",      "##      ",      " ###### ",      "      ##",      "##    ##",      " ###### "    },    {      "##    ##",      "##    ##",      "##    ##",      "########",      "##    ##",      "##    ##",      "##    ##"    }};char (*p) = str;在这个例子中,`str`是一个二维字符数组,每个字符串的长度是9个字符。`(*p)`表示一个指向长度为9的字符数组的指针。我们将 `str` 赋值给指针 `p`,这样 `p` 就指向了 `str` 数组的首地址。您可以使用指针 `p` 来访问和操作 `str` 数组中的元素。希望对您有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

疯狗马德森 发表于 2023-12-1 15:18:09

FishC_GPT 发表于 2023-12-1 15:04
如果要定义一个指向二维字符数组的指针,您可以使用以下语法:在这个例子中,`str`是一个二维字符数组, ...

如果按照str[]和char (*p) = str这样定义的话,请问如何将FISH这四个横向打印出来呢?for语句代码如何编写

FishC_GPT 发表于 2023-12-1 15:18:22

疯狗马德森 发表于 2023-12-01 15:18
如果按照str和char (*p) = str这样定义的话,请问如何 ...

要将"FISH"这四个横向打印出来,您可以使用如下的for循环代码:

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 7; j++) {
      printf("%c", *(p + j));
    }
    printf("\n");
}
在这段代码中,外层的for循环用于遍历行,内层的for循环用于遍历列。通过指针 `p` 加上索引 `i` 和 `j` 的偏移,可以访问到 `str` 数组中相应位置的字符。使用`printf`函数打印字符时,用`%c`作为格式控制符。

这样就能够将鱼的每一行横向打印出来。希望对您有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

疯狗马德森 发表于 2023-12-1 15:24:12

FishC_GPT 发表于 2023-12-1 15:18
要将"FISH"这四个横向打印出来,您可以使用如下的for循环代码:



这样不对。我想要输出######## ############    ##
##      ####    ## ##    ##
##      ####       ##    ##
######    ##   ##############
##      ##      ## ##    ##
##      ####    ## ##    ##
##       ############    ##
这样的结果

FishC_GPT 发表于 2023-12-1 15:24:39

疯狗马德森 发表于 2023-12-01 15:24
这样不对。我想要输出######## ############    # ...

非常抱歉,我之前的回答有误。如果您想要将`FISH`这四个横向打印出来,您可以使用如下代码:#include <stdio.h>int main() {    char str = {      {            "########",            "##      ",            "##      ",            "######",            "##      ",            "##      ",            "##      "      },      {            "####",            " ## ",            " ## ",            " ## ",            " ## ",            " ## ",            "####"      },      {            " ###### ",            "##    ##",            "##      ",            " ###### ",            "      ##",            "##    ##",            " ###### "      },      {            "##    ##",            "##    ##",            "##    ##",            "########",            "##    ##",            "##    ##",            "##    ##"      }    };    for (int i = 0; i < 7; i++) {      for (int j = 0; j < 4; j++) {            for (int k = 0; k < 9; k++) {                printf("%c", str);            }            printf(" ");      }      printf("\n");    }    return 0;}在这段代码中,`str`是一个三维字符数组,其中每个维度的大小分别为 ``,表示四个鱼的图案,每个鱼有七行九列的字符。外层的两个循环用于遍历行和列,内层的循环用于遍历每个字符。通过访问 `str` 数组的不同维度,可以按照行将鱼的图案打印出来。希望对您有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

疯狗马德森 发表于 2023-12-1 15:35:47

FishC_GPT 发表于 2023-12-1 15:24
非常抱歉,我之前的回答有误。如果您想要将`FISH`这四个横向打印出来,您可以使用如下代码:#include int ...

如果把str定义成一个二维数组,再定义一个指针数组指向这个二维数组,最终用指针数组输出打印“FISH”这四个字母,代码应该如何写呢?

FishC_GPT 发表于 2023-12-1 15:36:24

疯狗马德森 发表于 2023-12-01 15:35
如果把str定义成一个二维数组,再定义一个指针数组指 ...

如果您想用指针数组来输出打印"FISH"这四个字母,可以按照以下方式编写代码:

#include <stdio.h>

int main() {
    char str = {
      {
            "########",
            "##      ",
            "##      ",
            "######",
            "##      ",
            "##      ",
            "##      "
      },
      {
            "####",
            " ## ",
            " ## ",
            " ## ",
            " ## ",
            " ## ",
            "####"
      },
      {
            " ###### ",
            "##    ##",
            "##      ",
            " ###### ",
            "      ##",
            "##    ##",
            " ###### "
      },
      {
            "##    ##",
            "##    ##",
            "##    ##",
            "########",
            "##    ##",
            "##    ##",
            "##    ##"
      }
    };

    char *str_ptr;
    for (int i = 0; i < 4; i++) {
      str_ptr = str;
    }

    for (int i = 0; i < 7; i++) {
      for (int j = 0; j < 4; j++) {
            printf("%s ", str_ptr);
            str_ptr += 9;// 指针偏移9个字符的长度,指向下一行
      }
      printf("\n");
    }

    return 0;
}

在这段代码中,我们首先定义了一个二维字符数组`str`,用来存储"FISH"这四个字母的图案。然后我们定义了一个指针数组`str_ptr`,用来存储指向`str`每个字母图案的指针。通过`for`循环将每个字母图案的第一行的地址赋值给`str_ptr`中的元素。

接着,我们使用两个嵌套的`for`循环来遍历打印每行字符。外层循环控制行数,内层循环控制每个字母图案的打印。在内层循环中,我们通过`printf`函数打印每个字母图案的当前行,然后将指针偏移9个字符的长度,以便指向下一行。

这样,就可以使用指针数组按照水平方向打印"FISH"这四个字母的图案了。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 28节课后题求助大神点拨