记一次心态差点崩了的找bug过程

下面这段代码本希望对fgets()函数进行改造;(1)去除末尾的\n (2)清除输入区。但是有个地方错误了

char *s_gets(char *str,int n){
    char *ret;
    int i = 0;
    ret = fgets(str,n,stdin);
    if(ret){
        while(str[i] != '\n' && str[i] != '\0'){
            i ++;
            if(str[i] == '\n'){  //这里错了,把if条件写进了while循环里,导致每次输入单字符后,清除掉的不是残存的字符串,而是直接开始getchar后面输入的字符
                str[i] = '\0';}
            else{
                while(getchar()!='\n'){
                    continue;
                }
            }
        }
    }
    return ret;
}

正确的答案是

char *s_gets(char *str,int n){
    char *ret;
    int i = 0;
    ret = fgets(str,n,stdin);
    if(ret){
        while(str[i] != '\n' && str[i] != '\0'){
            i ++;}
        if(str[i] == '\n'){
            str[i] = '\0';}
        else{
            while(getchar()!='\n'){
                continue;
            }
        }
    }
    return ret;
}

面对这个问题的时候,我的做法是:一条一条代码的和书上对,查查有哪些不一样的地方,初步锁定了问题,也没有初步想,最后把问题推给了答疑群里的其他人。尽管最后在志愿者的帮助下解决了,但是浪费了大量的时间,心态也有些崩了。

正确的做法应该是:不骄不躁,把一个问题拆解成若干子问题,一个一个慢慢解决

你可能感兴趣的:(记一次心态差点崩了的找bug过程)