user-0 提问: C语言求助！！

回复:
user: user-0
content: 引用 4 楼 Cavout的回复:#include<stdio.h>  int main() {     int i,n;      void co(char a[],char b[]);      char ch[50],c[20];      gets(ch);     co(ch,c);     puts(c);      return 0; }  void co(char a[],char b[]) {     int i,n,m=0,s;      for(n=0;a[n]!='\0';n++)     {         for(i=0;(a[i+n]!=' ')&&(a[i+n]!='\0');i++)         {             if(m<i)             {                 m=i,s=n;             }         }     }      //printf("m=%d, s=%d", m, s);     for(i=0;(a[s]!=' ')&&(a[s]!='\0');i++,s++)     {         //printf("s=%d, a[s]=%c", s, a[s]);         b[i]=a[s];     }      b[i]='\0';     //puts(b); } （先看代码吧，抱歉对你的代码重新做了个排版，有个好的排版可以使代码更容易阅读哦）  问题在于你的co函数中获得最长字符串的那个for循环，红色部分，对比看哈。 你的问题就在你把s重新赋值了，s本来是用来存储最长字符串起始位置的变量，但是在上一个循环中n已经循环到了末尾，你在这里重新赋值为n不就从末尾开始找了吗？自然for循环一开始就退出了，因为s==n，所以a[s] == '\0'。  程序中m是用来存储查找的字符串的长度的，应该是m=i+1;  应为i是从0开始的。  另外就是你在循环查找每个单词的时候，其实可以一个一个单词的做，而不是一个一个字母的做，比如：hello world homeland exit 在找完hello之后 可以直接找world，而不是找完hello后接着找ello。 懂了谢谢谢谢那我要加以改进。

user: user-0
content: 引用 5 楼 qq_41229894的回复:[quote=引用 4 楼 Cavout的回复:]#include<stdio.h>  int main() {     int i,n;      void co(char a[],char b[]);      char ch[50],c[20];      gets(ch);     co(ch,c);     puts(c);      return 0; }  void co(char a[],char b[]) {     int i,n,m=0,s;      for(n=0;a[n]!='\0';n++)     {         for(i=0;(a[i+n]!=' ')&&(a[i+n]!='\0');i++)         {             if(m<i)             {                 m=i,s=n;             }         }     }      //printf("m=%d, s=%d", m, s);     for(i=0;(a[s]!=' ')&&(a[s]!='\0');i++,s++)     {         //printf("s=%d, a[s]=%c", s, a[s]);         b[i]=a[s];     }      b[i]='\0';     //puts(b); } （先看代码吧，抱歉对你的代码重新做了个排版，有个好的排版可以使代码更容易阅读哦）  问题在于你的co函数中获得最长字符串的那个for循环，红色部分，对比看哈。 你的问题就在你把s重新赋值了，s本来是用来存储最长字符串起始位置的变量，但是在上一个循环中n已经循环到了末尾，你在这里重新赋值为n不就从末尾开始找了吗？自然for循环一开始就退出了，因为s==n，所以a[s] == '\0'。  程序中m是用来存储查找的字符串的长度的，应该是m=i+1;  应为i是从0开始的。  另外就是你在循环查找每个单词的时候，其实可以一个一个单词的做，而不是一个一个字母的做，比如：hello world homeland exit 在找完hello之后 可以直接找world，而不是找完hello后接着找ello。 ～。。。       。什么意思？？[/quote] 看错了我仔细看看

user: user-0
content: 引用 4 楼 Cavout的回复:#include<stdio.h>  int main() {     int i,n;      void co(char a[],char b[]);      char ch[50],c[20];      gets(ch);     co(ch,c);     puts(c);      return 0; }  void co(char a[],char b[]) {     int i,n,m=0,s;      for(n=0;a[n]!='\0';n++)     {         for(i=0;(a[i+n]!=' ')&&(a[i+n]!='\0');i++)         {             if(m<i)             {                 m=i,s=n;             }         }     }      //printf("m=%d, s=%d", m, s);     for(i=0;(a[s]!=' ')&&(a[s]!='\0');i++,s++)     {         //printf("s=%d, a[s]=%c", s, a[s]);         b[i]=a[s];     }      b[i]='\0';     //puts(b); } （先看代码吧，抱歉对你的代码重新做了个排版，有个好的排版可以使代码更容易阅读哦）  问题在于你的co函数中获得最长字符串的那个for循环，红色部分，对比看哈。 你的问题就在你把s重新赋值了，s本来是用来存储最长字符串起始位置的变量，但是在上一个循环中n已经循环到了末尾，你在这里重新赋值为n不就从末尾开始找了吗？自然for循环一开始就退出了，因为s==n，所以a[s] == '\0'。  程序中m是用来存储查找的字符串的长度的，应该是m=i+1;  应为i是从0开始的。  另外就是你在循环查找每个单词的时候，其实可以一个一个单词的做，而不是一个一个字母的做，比如：hello world homeland exit 在找完hello之后 可以直接找world，而不是找完hello后接着找ello。 ～。。。       。什么意思？？

user: user-1
content: #include<stdio.h>  int main() {     int i,n;      void co(char a[],char b[]);      char ch[50],c[20];      gets(ch);     co(ch,c);     puts(c);      return 0; }  void co(char a[],char b[]) {     int i,n,m=0,s;      for(n=0;a[n]!='\0';n++)     {         for(i=0;(a[i+n]!=' ')&&(a[i+n]!='\0');i++)         {             if(m<i)             {                 m=i,s=n;             }         }     }      //printf("m=%d, s=%d", m, s);     for(i=0;(a[s]!=' ')&&(a[s]!='\0');i++,s++)     {         //printf("s=%d, a[s]=%c", s, a[s]);         b[i]=a[s];     }      b[i]='\0';     //puts(b); } （先看代码吧，抱歉对你的代码重新做了个排版，有个好的排版可以使代码更容易阅读哦）  问题在于你的co函数中获得最长字符串的那个for循环，红色部分，对比看哈。 你的问题就在你把s重新赋值了，s本来是用来存储最长字符串起始位置的变量，但是在上一个循环中n已经循环到了末尾，你在这里重新赋值为n不就从末尾开始找了吗？自然for循环一开始就退出了，因为s==n，所以a[s] == '\0'。  程序中m是用来存储查找的字符串的长度的，应该是m=i+1;  应为i是从0开始的。  另外就是你在循环查找每个单词的时候，其实可以一个一个单词的做，而不是一个一个字母的做，比如：hello world homeland exit 在找完hello之后 可以直接找world，而不是找完hello后接着找ello。

user: user-0
content: 引用 2 楼 赵4老师的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 我是错在哪里

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0