注册 登录
编程论坛 C语言论坛

这个问题要你输入字符并统计'ei'出现的次数。问题如下:

hffjhhh 发布于 2019-10-11 12:45, 1769 次点击
程序代码:

#include<stdio.h>
int main(void){
    char ch;
    char last_ch=0;           //这行的作用是什么?为什么要将lash_ch赋值为0?
    int count=0;
    while((ch=getchar())!='#'){
        if((ch=='i')&&(last_ch=='e'))
            count++;
        last_ch=ch;           //这行的作用是什么?为什么要last_ch=ch
    }
    printf("%d",count);
    return 0;
}
4 回复
#2
rjsp2019-10-11 14:20
要不你自己写一个?
即使你不会C语言,你也可以用中文将逻辑描述清楚。
#3
hffjhhh2019-10-11 21:29
以下是引用rjsp在2019-10-11 14:20:28的发言:

要不你自己写一个?
即使你不会C语言,你也可以用中文将逻辑描述清楚。

我写了这段,但是无法统计'ei'出现的次数。问题出在哪?该如何修改?
程序代码:
#include<stdio.h>
int main(void){
    int count=0;
    int inword=0;
    char ch;
    while((ch=getchar()!='#')){
        if((ch=='e')&&(inword==0))
            inword=1;
        else
            if(!(ch=='i'))
                continue;
            else
                if((ch=='i')&&(inword==1)){
                    count++;
                    inword=0;
                }            
    }
    printf("ei的个数有%d个",count);
    return 0;
}
#4
bcbbcclbbc2019-10-11 21:47
同意二楼的说法。当你面对这个问题时,先想想自己会怎么做,再怎么,最后怎么才算结束。
不需要把别人的想法强加给自己,适当的理解,变通。
首先看到问题是计算“ei”的次数,这时脑子里应该有一些方法告诉你先找到“ei”再计算“ei”的数量。然后先是如何找‘ei’,慢慢细化步骤写出自己的算法。
if((ch=='i')&&(last_ch=='e'))

是先判断“ch==‘i’”为真,然后再判断last_ch的值是否为‘e’。只有当ch为‘i’的时候才判断last_ch是否为‘e’。
两者真“count++”,为假数量不变。之后将ch赋值给last_ch,并将下一个字符送给ch,直到出现结束标志。
一个变量在定义的时候未进行初始化,它的值是不确定的(任意值),未对其赋值前直接使用可能会产生异常(指针变量的情况更加严重)。

char last_ch=0;           //这行的作用是什么?为什么要将lash_ch赋值为0?

如果last_ch不赋值,直接使用,可能出现“last_ch==‘e’”的情况。
至于给last_ch赋什么值是看你的情况的,题目是计算‘ei’则不要用‘e’或‘i’赋值,自找麻烦。


[此贴子已经被作者于2019-10-11 21:52编辑过]

#5
bcbbcclbbc2019-10-11 22:06
回复 3楼 hffjhhh
if语句嵌套有问题,其实你可以一步一步的判断答案,没必要这样用if嵌套语句,多了容易出错,而且回过头来也不容易找出问题点。最后加个注释,或者大括号区分。
if语句只是判断真假,真执行if后面的语句,假则执行else后面的语句。无法即执行if后面的语句有执行else后面的语句。
1