一个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类型就一定要输入够数组个数才行么? win
win
循环次数 = 3 实际数组长度 = 4
--------------------------------
Process exited after 4.279 seconds with return value 0
请按任意键继续. . .
这个是输出结果,只输入了三个元素回车就能正常结束,并且可以获得正确的循环次数和实际数组长度,但是同样方法用在int 类型就不行了,那int类型有什么方法效果一样呢? 小小麦兜兜 发表于 2019-8-31 23:33
win
win
循环次数 = 3 实际数组长度 = 4
字符数组遇到回车后会自动在后面加上结束符'\0'并结束输入,数字数组不会.除非你自己设置一个结束条件 本帖最后由 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]