请指教一下,下面这个代码我想得出如:输入"thios"回车,再输入"o",回车得出"this",但是

请指教一下,下面这个代码我想得出如:输入"thios"回车,再输入"o",回车得出"this",但是不知道哪里出问题了? #include"stdio.h" main() { extern enter_string(),delete_string(),print_string(); static char str[80]; char c; enter_string(str); scanf("%c",&c); delete_string(str,c); print_string(str); } extern enter_string(str) char str[80]; { gets(str); } extern delete_string(str,ch) char str[],ch; { int i,j; for(i=j=0;str[i]!='\0';i++) if(str[i]!=ch) str[j++]=str[i]; str[i]='\0'; } extern print_string(str) char str[]; { printf("%s",str); }
什么鬼_呀你
浏览 1737回答 3
3回答

onemoo

先吐槽:发代码时一定要用网页中的格式化工具格式化一下,不然这么乱一坨很少有人愿意看的...错误点在 delete_string() 函数中最后的 str[i]='\0';,应该是 str[j]='\0';因为 i 表示的是原字符串的结尾,在 for 循环退出时 i 所指的就是原字符串结尾的 \0,而 j 才是指向改写后的字符串结尾,所以应该在 j 位置上写入 \0。否则你那样写的话,等于原字符串结尾位置没有变。所以即便 s 覆盖了前面的 o,最后还会按照原字符串的长度输出 thiss,没错吧?再次吐槽:这个代码看着真有沧桑感啊!  代码风格比 C89 K&R 还老…… 你到底看的是哪个年代的教程啊?!现在学习C/C++语言最好按照新标准来学,太老的代码除了“经典”外还包含了很多现在视为错误和不推荐的写法,已经不适合用来学习了!你这样的 main 函数应该声明为 int main(void),不要省略前面的 int 及括号中的 void(这是在你不使用main参数的情况下)其实函数声明时缺少返回类型,编译器会隐式认为其返回类型是 int,这是在老标准中常用的,现在不推荐这样写了。声明/定义函数时参数名和参数类型都要写在参数列表的括号中。你这样将参数类型写在函数体前、函数名后的风格比 C89 还要老……定义函数时同样不要忘记明确写上返回类型,而且不用在函数定义前写 extern。其实你可以把这几个函数定义在 main 函数之前,这样也就不用前置声明它们了(即便是前置声明也没必要写extern)。
打开App,查看更多内容
随时随地看视频慕课网APP