很多学生当问题超纲的时候就会乱猜,没有回到原点理清思路。下面就是我回答学生的一个经典问题。
一、问题代码
上面是某位同位同鞋填写的空,发同只有最后一个对了,其它都不对
二、分析
通过上面的题目我们知道
需要输入一个字符串,然后分析它的长度。
C语句一般情况下是按顺序一句一句执行的。
第5行:首先定义一个k做循环变量,len为字符串长度
第6行:定义一个足够长的字符数组来存放字符串
第7行:初始化k的值为0
第8行:接着就开始循环这个字符数组了。。。
你循环数组之前,是不是要让用户输入字符串啊?!!那这个while循环中肯定是让用户输入字符的。而这位同学就直接写了,所以就直接报错了,这是不对的。有什么可以在while条件中让用户输入字符呢?有,getchar(),注解为:
C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。
那么while条件应该怎么写呢?
//把输入的值赋值给str[]字符数组,并判断第k个值是不是"\n"
while ( (str[k]=getchar())!='\n')
循环从下标0起,逐个读整个字符并k进行加1,当读到是结束字符的时候就退出循环。
那11行应该怎么填写呢。。
先不理,按正常顺序,我们得到了k之后直接把k赋值给len就行了。
再回到11行,如果非要写的话,我把k也赋值给结束是不是也可以?
str[k]='\0';
而这位同学就直接让用户输入,明显不对,让用户输入肯定要在while循环读取字符之前。
三、最终代码
#include <stdio.h>
int main()
{
int k,len;
char str[81];
k=0;
while ( (str[k]=getchar())!='\n')
{
k++;
}
str[k]='\0';
len=k;
printf("%d\n",len);
return 0;
}