鱼C论坛

 找回密码
 立即注册
查看: 1354|回复: 3

[已解决]一个C语言问题,请教一下,真的搞不懂

[复制链接]
发表于 2019-8-31 23:27:06 | 显示全部楼层 |阅读模式

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

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

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

int main (void)
{
        int a[10],i,n,x;
        char b[10];

        /*for (i = 0;i<10; i++)
        {
                scanf ("%d",&a[i]);
        }

        for (i = 0; i < 10; i++)
        {
                printf("%d ",a[i]);
        }*/ 
        
        for (n = 0;n<10;n++)
        {
                scanf ("%c",&b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        
        for (n=0;n<10;n++)
        {
                printf ("%c",b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        
        x = strlen(b); 
        
        printf ("循环次数 = %d 实际数组长度 = %d",n,x);

        return 0;
}

char 类型的数组,可以用后面那两段for 用if判断遇到回车结束,而且也可以记录实际循环次数,也能得到实际使用数组的元素个数,但是上面那两段由于是int类型,所以不能判断遇到\n结束,必须打够10个数字才能结束,而且还要用空格分开每个数字,在实际运用中,如果是int类型就一定要输入够数组个数才行么?
最佳答案
2019-9-1 11:28:23
本帖最后由 superbe 于 2019-9-1 11:34 编辑
# include <stdio.h>
# include <string.h>

int main (void)
{
        int a[10],i,n,x;
        char b[10];

        printf("输入int数组a的元素(-1回车结束):\n");
        for (i = 0;i<10; i++)
        {
                scanf ("%d",&a[i]);
                if(a[i]==-1) break;    //假如你的数组元素应该都是正数,可以用一个特殊的值-1表示数组结束
        }

        for (i = 0; i < 10; i++)
        {
                printf("%d ",a[i]);
                if(a[i]==-1) break;
        }
        printf ("\na 循环次数 = %d 实际数组长度 = %d\n",i+1,i+1);    //循环次数和实际数组长度都是i+1

        getchar();    //吃掉上面最后的的回车,否则会被下面当成输入结束
        printf("\n输入char数组b的元素(回车结束):\n");
        for (n = 0;n<10;n++)
        {
                scanf ("%c",&b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        b[n+1]='\0';    //上面循环后b中元素是win三个字符和一个'\n',共4个,后面都是未初始化,所以添加一个结束标志'\0',否则strlen(b)结果可能不正确。
        for (n=0;n<10;n++)
        {
                printf ("%c",b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        
        x = strlen(b); 
        
        printf ("b 循环次数 = %d 实际数组长度 = %d\n",n+1,x);    //循环次数应该是n+1

        return 0;
}
1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-31 23:33:42 | 显示全部楼层
win
win
循环次数 = 3 实际数组长度 = 4
--------------------------------
Process exited after 4.279 seconds with return value 0
请按任意键继续. . .

这个是输出结果,只输入了三个元素回车就能正常结束,并且可以获得正确的循环次数和实际数组长度,但是同样方法用在int 类型就不行了,那int类型有什么方法效果一样呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-1 01:51:55 | 显示全部楼层
小小麦兜兜 发表于 2019-8-31 23:33
win
win
循环次数 = 3 实际数组长度 = 4

字符数组遇到回车后会自动在后面加上结束符'\0'并结束输入,数字数组不会.除非你自己设置一个结束条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-1 11:28:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-9-1 11:34 编辑
# include <stdio.h>
# include <string.h>

int main (void)
{
        int a[10],i,n,x;
        char b[10];

        printf("输入int数组a的元素(-1回车结束):\n");
        for (i = 0;i<10; i++)
        {
                scanf ("%d",&a[i]);
                if(a[i]==-1) break;    //假如你的数组元素应该都是正数,可以用一个特殊的值-1表示数组结束
        }

        for (i = 0; i < 10; i++)
        {
                printf("%d ",a[i]);
                if(a[i]==-1) break;
        }
        printf ("\na 循环次数 = %d 实际数组长度 = %d\n",i+1,i+1);    //循环次数和实际数组长度都是i+1

        getchar();    //吃掉上面最后的的回车,否则会被下面当成输入结束
        printf("\n输入char数组b的元素(回车结束):\n");
        for (n = 0;n<10;n++)
        {
                scanf ("%c",&b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        b[n+1]='\0';    //上面循环后b中元素是win三个字符和一个'\n',共4个,后面都是未初始化,所以添加一个结束标志'\0',否则strlen(b)结果可能不正确。
        for (n=0;n<10;n++)
        {
                printf ("%c",b[n]);
                if (b[n] == '\n')
                {
                        break;
                }
        }
        
        x = strlen(b); 
        
        printf ("b 循环次数 = %d 实际数组长度 = %d\n",n+1,x);    //循环次数应该是n+1

        return 0;
}
1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 23:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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