对鱼C第18课4分钟的代码有疑问
int main(){
int n, i;
printf("请输入字符的个数:");
scanf("%d",&n);
char a; \\小甲鱼写的是 “char a”
printf("请开始输入字符:");
getchar();
for(i=0; i<n;i++)
{
scanf("%c",&a);
}
a= '\0';
printf("你输入的字符是:%s\n",a);
return 0;
}
我在测试后发现两个代码都一样,那这个n+1还有必要写吗。 定义的a里一共有n+1个元素
也就是下面for循环里的a到a,
你改成char a后,在访问到a时数组会越界报错
char a代表这个数组有N个数, a=‘\0’代表读取第n个数时结束。理论上a里面有n+1个数,但是在将n赋值后,例如char a 和 a。
在输入第4个数后,第5个数及之后的数均不输出,只输出前面4个输入的数,和甲鱼的代码的输出结果是一样的,那么n+1是否为必要呢。
对了,我在把 ( a= '\0'; )删去后,输入17,然后输入 ( i love fishc,com! ),输出结果是( i love fishc,com!? ),这个问号是怎么来的。
昨非 发表于 2020-10-17 15:20
定义的a里一共有n+1个元素
也就是下面for循环里的a到a,
你改成char a后,在访问到a时数 ...
我用的CODE,没有报错,结果和char a 是一样的。
打个比方,char a;其中n=5.就表示这个数组里有5位数对吧;a就是a,意思是读到char a中的第5位数;这5位数分别是:1,2,3,4,5; (a='\0';)就表示读到5时就停止,不继续往下读。是这样的吧。 这里根本没用到n+1。循环在n-1就停了。所以没啥区别 2269099035 发表于 2020-10-17 17:19
这里根本没用到n+1。循环在n-1就停了。所以没啥区别
那有没有需要用到n+1的例子呢 光C 发表于 2020-10-17 17:22
那有没有需要用到n+1的例子呢
没遇到过, n+1估计是小甲鱼想方便自己调用a,他懒得写a。如果这个最后元素用得多了,直接a就能节省一定的时间。
字符串是以'\0‘结尾的。所以不管你数组咋样,你要是以%s访问,那么计算机会从头开始,一个个问,直到遇到'\0'。'\0'在内存中实际就是0。它是一个字节,所以是八个0。你后面的?是因为你输入了17,计算机没有停止,会继续下去,那个计算机就显示为?,然后,后面的它里面本来就是0,所以?后面没东西了,就出现那个了 405794672 发表于 2020-10-17 18:31
n+1估计是小甲鱼想方便自己调用a,他懒得写a。如果这个最后元素用得多了,直接a就能节省一定的 ...
谢谢,明白了
页:
[1]