鱼C论坛

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

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

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

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

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

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

  3. int main (void)
  4. {
  5.         int a[10],i,n,x;
  6.         char b[10];

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

  11.         for (i = 0; i < 10; i++)
  12.         {
  13.                 printf("%d ",a[i]);
  14.         }*/
  15.        
  16.         for (n = 0;n<10;n++)
  17.         {
  18.                 scanf ("%c",&b[n]);
  19.                 if (b[n] == '\n')
  20.                 {
  21.                         break;
  22.                 }
  23.         }
  24.        
  25.         for (n=0;n<10;n++)
  26.         {
  27.                 printf ("%c",b[n]);
  28.                 if (b[n] == '\n')
  29.                 {
  30.                         break;
  31.                 }
  32.         }
  33.        
  34.         x = strlen(b);
  35.        
  36.         printf ("循环次数 = %d 实际数组长度 = %d",n,x);

  37.         return 0;
  38. }
复制代码


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

  3. int main (void)
  4. {
  5.         int a[10],i,n,x;
  6.         char b[10];

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

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

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

  42.         return 0;
  43. }
复制代码

1.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

字符数组遇到回车后会自动在后面加上结束符'\0'并结束输入,数字数组不会.除非你自己设置一个结束条件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  3. int main (void)
  4. {
  5.         int a[10],i,n,x;
  6.         char b[10];

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

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

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

  42.         return 0;
  43. }
复制代码

1.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 17:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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