下面这段代码本希望对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;
}
面对这个问题的时候,我的做法是:一条一条代码的和书上对,查查有哪些不一样的地方,初步锁定了问题,也没有初步想,最后把问题推给了答疑群里的其他人。尽管最后在志愿者的帮助下解决了,但是浪费了大量的时间,心态也有些崩了。
正确的做法应该是:不骄不躁,把一个问题拆解成若干子问题,一个一个慢慢解决