WUHESAN 发表于 2023-12-14 19:34:27

代码异同求助

#include <stdio.h>//晶体管显示数字
#include <string.h>

#define max 10;

void line(char i[]);
void line(char i[])
{
        int l = strlen(i) ;
        printf("%d\n",strlen(i));
        int u = 0;
        while(i != '\0')
        {
                printf("%c\n",i);
                u++;
        }
        printf("%d\n",u);
        char *k = &i;
        int line = {{1,1,1,1,1,1,0},//0
                                           {0,1,1,0,0,0,0},//1
                                           {1,1,0,1,1,0,1},//2
                                           {1,1,1,1,0,0,1},//3
                                           {0,1,1,0,0,1,1},//4
                                           {1,0,1,1,0,1,1},//5
                                           {1,0,1,1,1,1,1},//6
                                           {1,1,1,0,0,0,0},//7
                                           {1,1,1,1,1,1,1},//8
                                           {1,1,1,1,0,1,1}};//9
        while(k-&i < l)//第一行
        {
        if(line[*k-0x30] == 1)
        printf(" _");
        else putchar(' ');
        putchar('\t');
        *k++;
        }
        k = k-l;
        putchar('\n');
       
        while(k-&i < l){      //第二行
        if(line[*k-0x30] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-1;
        putchar('\n');
       
        while(k-&i < l){//第三行
        if(line[*k-0x30] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-1;
        putchar('\n');
}

int main()
{
        int i;
        char u;
        printf("请输入数字;");
        for(i = 0;i < 10;i++)
        {
        scanf("%c",&u);
        }
        line(u);
               
        return 0;
}



#include <stdio.h>//晶体管显示数字
#include <string.h>

#define max 10;

void line(char i[]);
void line(char i[])
{
        int l = strlen(i) ;
        printf("%d\n",strlen(i));
        int u = 0;
        while(i != '\0')
        {
                printf("%c\n",i);
                u++;
        }
        printf("%d\n",u);
        char *k = &i;
        int line = {{1,1,1,1,1,1,0},//0
                                           {0,1,1,0,0,0,0},//1
                                           {1,1,0,1,1,0,1},//2
                                           {1,1,1,1,0,0,1},//3
                                           {0,1,1,0,0,1,1},//4
                                           {1,0,1,1,0,1,1},//5
                                           {1,0,1,1,1,1,1},//6
                                           {1,1,1,0,0,0,0},//7
                                           {1,1,1,1,1,1,1},//8
                                           {1,1,1,1,0,1,1}};//9
        while(k-&i < l)//第一行
        {
        if(line[*k-0x30] == 1)
        printf(" _");
        else putchar(' ');
        putchar('\t');
        *k++;
        }
        k = k-l;
        putchar('\n');
       
        while(k-&i < l){      //第二行
        if(line[*k-0x30] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-l;
        putchar('\n');
       
        while(k-&i < l){//第三行
        if(line[*k-0x30] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-1;
        putchar('\n');
}

int main()
{
        int i;
        char u;
        printf("请输入数字;");
        for(i = 0;i < 10;i++)
        {
        scanf("%c",&u);
        }
        line(u);
               
        return 0;
}

各位大佬过目,两份代码有何异同?为何跑出来的结果不相同

FishC 发表于 2023-12-14 19:35:17

这两份代码有很多问题。首先,你在代码开头的 #include 后没有包含任何头文件,应该根据你需要使用的函数和类型来添加相应的头文件。

其次,在声明宏 max 时,不需要添加分号。应该将代码改为:

#define max 10

接下来,在 line 函数的参数列表中,字符 i 应该改为字符数组 char i[],并且去掉函数内部的 strlen(i) 和 while 循环,因为你已经声明了字符数组作为函数参数,在函数内部可以直接操作字符数组的长度和内容。

另外,你定义了一个二维整型数组 line 来存储数字的显示方式,但是你在代码中使用了一个整型变量 line 来作为循环条件,会引起错误。你应该将 int line 修改为 int digit,并在循环中使用 digit 作为循环变量。

最后,你在主函数中使用了一个 for 循环来输入数字,并将数字存放在变量 u 中,但是你在 line 函数中只传递了变量 u,而没有传递数字的显示方式。你需要修改代码,使得主函数能够根据输入的数字调用 line 函数,并且传递正确的参数。

以下是修改过的代码示例:

#include <stdio.h>
#include <string.h>

#define max 10

void line(char i[]);
void line(char i[])
{
    int l = strlen(i);
    printf("%d\n", l);
    int u = 0;
    while (i != '\0')
    {
      printf("%c\n", i);
      u++;
    }
    printf("%d\n", u);

    char *k = i;
    int digit = {{1, 1, 1, 1, 1, 1, 0},    //0
                     {0, 1, 1, 0, 0, 0, 0},    //1
                     {1, 1, 0, 1, 1, 0, 1},    //2
                     {1, 1, 1, 1, 0, 0, 1},    //3
                     {0, 1, 1, 0, 0, 1, 1},    //4
                     {1, 0, 1, 1, 0, 1, 1},    //5
                     {1, 0, 1, 1, 1, 1, 1},    //6
                     {1, 1, 1, 0, 0, 0, 0},    //7
                     {1, 1, 1, 1, 1, 1, 1},    //8
                     {1, 1, 1, 1, 0, 1, 1}};   //9

    int j;
    for (j = 0; j < l; j++)
    {
      int num = i - '0';
      int n;
      for (n = 0; n < 7; n++)
      {
            if (digit == 1)
                printf("_");
            else
                putchar(' ');
      }
      putchar('\t');
    }
    putchar('\n');

    for (j = 0; j < l; j++)
    {
      int num = i - '0';
      int n;
      for (n = 0; n < 7; n++)
      {
            if (n == 1 || n == 2 || n == 4 || n == 5)
                printf("|");
            else
                putchar(' ');

            if (digit == 1)
                printf("_");
            else
                putchar(' ');

            if (n == 0 || n == 1 || n == 3 || n == 4)
                printf("|");
            else
                putchar(' ');
      }
      putchar('\t');
    }
    putchar('\n');

    for (j = 0; j < l; j++)
    {
      int num = i - '0';
      int n;
      for (n = 0; n < 7; n++)
      {
            if (n == 1 || n == 2 || n == 4 || n == 5)
                printf("|");
            else
                putchar(' ');

            if (digit == 1)
                printf("_");
            else
                putchar(' ');

            if (n == 0 || n == 1 || n == 3 || n == 4)
                printf("|");
            else
                putchar(' ');
      }
      putchar('\t');
    }
    putchar('\n');
}

int main()
{
    char u;
    printf("请输入数字:");
    scanf("%s", u);
    line(u);

    return 0;
}

希望这样的修改能够解决你的问题。如果还有其他问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 代码异同求助