小小麦兜兜 发表于 2019-8-31 23:27:06

一个C语言问题,请教一下,真的搞不懂

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

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

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

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

        return 0;
}

char 类型的数组,可以用后面那两段for 用if判断遇到回车结束,而且也可以记录实际循环次数,也能得到实际使用数组的元素个数,但是上面那两段由于是int类型,所以不能判断遇到\n结束,必须打够10个数字才能结束,而且还要用空格分开每个数字,在实际运用中,如果是int类型就一定要输入够数组个数才行么?

小小麦兜兜 发表于 2019-8-31 23:33:42

win
win
循环次数 = 3 实际数组长度 = 4
--------------------------------
Process exited after 4.279 seconds with return value 0
请按任意键继续. . .

这个是输出结果,只输入了三个元素回车就能正常结束,并且可以获得正确的循环次数和实际数组长度,但是同样方法用在int 类型就不行了,那int类型有什么方法效果一样呢?

bin554385863 发表于 2019-9-1 01:51:55

小小麦兜兜 发表于 2019-8-31 23:33
win
win
循环次数 = 3 实际数组长度 = 4


字符数组遇到回车后会自动在后面加上结束符'\0'并结束输入,数字数组不会.除非你自己设置一个结束条件

superbe 发表于 2019-9-1 11:28:23

本帖最后由 superbe 于 2019-9-1 11:34 编辑

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

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

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

      for (i = 0; i < 10; i++)
      {
                printf("%d ",a);
                if(a==-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);
                if (b == '\n')
                {
                        break;
                }
      }
      b='\0';    //上面循环后b中元素是win三个字符和一个'\n',共4个,后面都是未初始化,所以添加一个结束标志'\0',否则strlen(b)结果可能不正确。
      for (n=0;n<10;n++)
      {
                printf ("%c",b);
                if (b == '\n')
                {
                        break;
                }
      }
      
      x = strlen(b);
      
      printf ("b 循环次数 = %d 实际数组长度 = %d\n",n+1,x);    //循环次数应该是n+1

      return 0;
}
页: [1]
查看完整版本: 一个C语言问题,请教一下,真的搞不懂