hualinux c 1.7 回学生党:没理清思路造成填写不对

很多学生当问题超纲的时候就会乱猜,没有回到原点理清思路。下面就是我回答学生的一个经典问题。

一、问题代码

上面是某位同位同鞋填写的空,发同只有最后一个对了,其它都不对

 

二、分析

通过上面的题目我们知道

需要输入一个字符串,然后分析它的长度。

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值