鱼C论坛

 找回密码
 立即注册
查看: 601|回复: 1

[已解决]代码异同求助

[复制链接]
发表于 2023-12-14 19:34:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{
        int i;
        char u[5];
        printf("请输入数字;");
        for(i = 0;i < 10;i++)
        {
        scanf("%c",&u[i]);
        }
        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[u] != '\0')
        {
                printf("%c\n",i[u]);
                u++;
        }
        printf("%d\n",u);
        char *k = &i[0];
        int line[10][7] = {{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[0] < l)//第一行
        {
        if(line[*k-0x30][0] == 1)
        printf(" _");
        else putchar(' ');
        putchar('\t');
        *k++;
        }
        k = k-l;
        putchar('\n');
       
        while(k-&i[0] < l){      //第二行
        if(line[*k-0x30][5] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30][6] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30][1] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-l;
        putchar('\n');
       
        while(k-&i[0] < l){  //第三行
        if(line[*k-0x30][4] == 1)
        printf("|");
        else putchar(' ');
        if(line[*k-0x30][3] == 1)
        printf("_");
        else putchar(' ');
        if(line[*k-0x30][2] == 1)
        printf("|");
        putchar('\t');
        *k++;
        }
        k = k-1;
        putchar('\n');
}

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

各位大佬过目,两份代码有何异同?为何跑出来的结果不相同
最佳答案
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 10void line(char i[]);void line(char i[]){    int l = strlen(i);    printf("%d\n", l);    int u = 0;    while (i[u] != '\0')    {        printf("%c\n", i[u]);        u++;    }    printf("%d\n", u);      char *k = i;    int digit[10][7] = {{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[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (digit[num][n] == 1)                printf("_");            else                putchar(' ');        }        putchar('\t');    }    putchar('\n');    for (j = 0; j < l; j++)    {        int num = i[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (n == 1 || n == 2 || n == 4 || n == 5)                printf("|");            else                putchar(' ');            if (digit[num][n] == 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[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (n == 1 || n == 2 || n == 4 || n == 5)                printf("|");            else                putchar(' ');            if (digit[num][n] == 1)                printf("_");            else                putchar(' ');            if (n == 0 || n == 1 || n == 3 || n == 4)                printf("|");            else                putchar(' ');        }        putchar('\t');    }    putchar('\n');}int main(){    char u[max];    printf("请输入数字:");    scanf("%s", u);    line(u);    return 0;}
希望这样的修改能够解决你的问题。如果还有其他问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 10void line(char i[]);void line(char i[]){    int l = strlen(i);    printf("%d\n", l);    int u = 0;    while (i[u] != '\0')    {        printf("%c\n", i[u]);        u++;    }    printf("%d\n", u);      char *k = i;    int digit[10][7] = {{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[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (digit[num][n] == 1)                printf("_");            else                putchar(' ');        }        putchar('\t');    }    putchar('\n');    for (j = 0; j < l; j++)    {        int num = i[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (n == 1 || n == 2 || n == 4 || n == 5)                printf("|");            else                putchar(' ');            if (digit[num][n] == 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[j] - '0';        int n;        for (n = 0; n < 7; n++)        {            if (n == 1 || n == 2 || n == 4 || n == 5)                printf("|");            else                putchar(' ');            if (digit[num][n] == 1)                printf("_");            else                putchar(' ');            if (n == 0 || n == 1 || n == 3 || n == 4)                printf("|");            else                putchar(' ');        }        putchar('\t');    }    putchar('\n');}int main(){    char u[max];    printf("请输入数字:");    scanf("%s", u);    line(u);    return 0;}
希望这样的修改能够解决你的问题。如果还有其他问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表