if(str[i] != ch)...是对的因为下面是str[j++] = str[i];就是把不是ch的字符复制到前面。这样前面的字符就被覆盖了。以字符串str 为 "abc",ch为'b'为例i = 0; j= 0str[i] != 'b' -> str[0] = str[0] -> str = "abc"i = 1; j = 1(因为条件成立,执行了j++)str[i] == 'b' -> str不变,j不变i = 2; j = 1str[i] != 'b' -> str[1] = str[2] -> str = "acc"循环结束,j=2str[j] = '\0' str = "ac"删除成功。至于输入放在什么函数里不会影响输入的执行,在一个外部函数中调用输入函数是完全可以,而且也不少见。所以str的输入在enter_string里,ch的输入放在main里面没有任何问题。