今天用fgets函数来计算数组的长度,下面先放出代码
#include<stdio.h>
#define MAX 1024
int main(){
char get[MAX];
int l = 0;
fgets(get/*储存数组位置*/, MAX/*字符读取长度*/, stdin/*标准输入流*/);
//计算字符长度.
//字符串会到\0代表结束
int i;
for(i = 0;i<MAX;i++){
if(get[i] != '\0'){
l += 1;
// l = 0 l = 0+1=1 l = 1+1=2 l = 2+1 = 3;
}
else{
break;
}
}
printf("您输入的字符长度为:%d",l);
return 0;
}
这是我第一次打出的代码,然后运行开始测试,正常情况下应该同我写的注释一样,运行到'\0'后自动停止运行,比如说我输入一个you那么我的输出值应该是3,可是结果却是4.
这件事激起了我很大的困惑和不解,接下来我又进行反复尝试,甚至把if和else里面的语句调换,都没有发现问题所在,直到我把这些东西打印出来,用整型打印出来了四个值,其中最后一个是10。
经过查阅资料后发现,ASCII表中,10对应的正是换行。
又联想到我输入之后会点击回车来确认输入,那么事情就清晰了,fgets函数把回车也算入了字符之一。
经查阅之后发现,fgets会将回车加入缓冲区中,如果未进行释放,那么最后就会读取到'\n'字符。
#include<stdio.h>
#define MAX 1024
int main(){
char get[MAX];
int l = 0;
fgets(get/*储存数组位置*/, MAX/*字符读取长度*/, stdin/*标准输入流*/);
//计算字符长度.
//字符串会到\0代表结束
//补充:fgets会算入\n!!!
int i;
for(i = 0;i<MAX;i++){
if(get[i] != '\n'){
l += 1;
// l = 0 l = 0+1=1 l = 1+1=2 l = 2+1 = 3;
}
else{
break;
}
}
printf("您输入的字符长度为:%d",l);
return 0;
}
果然,在更换过if中的语句,将'\0'换成了'\n'之后,发现程序的输出值正确了