CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

为什么这个循环出不去?

楼主liujunseco(椅子)2000-10-04 23:06:00 在 C/C++ / C语言 提问

从客户端的stdin输入string,如果string的前八位是"11001100",服务端就发回"123456“到客户端的stdout,如果不是"11001100",就提示错误,问题函数的源码:  
  void   dg_echo   (int   sockfd,   SA   *   pcliaddr,   socklen_t   clilen)  
  {    
      int   m,   n;  
      socklen_t   len;  
      char   mesg[MAXLINE];  
      char   *recvhead   =   "11001100"; /*   hlr   code   */  
      char   mesgsend[10];  
      char   *string1   =   "123456";  
      for   (;;)  
          {  
              len   =   clilen;  
              n   =   Recvfrom   (sockfd,   mesg,   MAXLINE,   0,   pcliaddr,   &len);  
              m   =   strncmp   (mesg,   recvhead,   8);  
              if   ((n   >   8)   &&   (m   ==   0))  
  {  
                                strncpy   (mesgsend,   string1,   6);  
                Sendto   (sockfd,   mesgsend,   strlen   (mesgsend),   0,   pcliaddr,   len);  
  }  
              else  
  {  
      fprintf   (stderr,   "Wrong   Number\n");  
      continue;  
  }  
          }  
  }  
  可是现在输"0000"到"Wrong   Number"后再输"11001100"打头的string也没反应了,为什么出不去'else   循环'了? 问题点数:60、回复次数:12Top

1 楼darkwing()回复于 2000-10-05 08:48:00 得分 0

string?  
  你一次读入8个字符的要求未被满足  
  Top

2 楼fishworm(胖子)回复于 2000-10-05 22:50:00 得分 0

将continue改为break.Top

3 楼liujunseco(椅子)回复于 2000-10-06 09:45:00 得分 0

不能改成break,我还要继续发消息呢!Top

4 楼Maxwell(不可知)回复于 2000-10-10 16:23:00 得分 0

        该复位的变量没有复位.出错后得把环境恢复到初始状态.  
  Top

5 楼longjack(阿建)回复于 2000-10-12 10:28:00 得分 60

代碼改進;  
  (1)建議在   n=Recvfrom(...);   後檢查n的值以確定是否有網路傳輸錯誤發生.  
  (2)fprintf(stderr,"Wrong   Number\n");後的     continue;沒有必要吧?  
  Top

6 楼softsprite(软件精灵)回复于 2000-10-14 00:50:00 得分 0

n   >   8   改为   n   >=   8Top

7 楼CoolHg(苦听)回复于 2000-10-14 12:42:00 得分 0

else体内没问题,主要可能出在以下几方面  
  1。第一次输入00000不满8位,所以输出"Wrong   Number"其实是在你输入了1100001010并发送后的事  
  2。n>8改为n>=8(其实这里根本用不着判断收到的长短)  
  3。对于mesg[maxline]最好改为mesg[maxline+1],字符串后还要一个'\0'才不会出问题,当然你这里要不要都无所谓Top

8 楼liujunseco(椅子)回复于 2000-10-15 11:19:00 得分 0

谢谢,如longjack兄说的,把continue改为return   就可以了,coolHg兄也给我很大启发,还有各位大侠,在此一并感谢,多谢!Top

相关问题

  • ??????????????为什么这个循环做不下去?
  • 为什么这个循环会溢出
  • 为什么这个循环它不循环???????????
  • 为什么这个程序会进入死循环的?
  • 这个循环插入CListCtrl项为什么会有错?
  • 这个程序为什么会死循环?(附源代码)
  • 为什么for循环不做下去了,是否与return有关?
  • while循环为什么不能继续下去呢?
  • 为什么是死循环?
  • 循环,为什么不对???

关键词

  • mesgsend
  • pcliaddr
  • mesg
  • sockfd
  • len
  • char

得分解答快速导航

  • 帖主:liujunseco
  • longjack

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo