CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

第一次见在for后加";"

楼主duanjunfeng(其实我是一个演员!)2006-09-07 11:04:05 在 C/C++ / C语言 提问

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat)。      
  例如,分别输入下面两个字符串:      
  FirstSrting—      
  SecondString      
  程序输出:      
  FirstString—SecondString      
     
  #include<stdio.h>      
  #include<conio.h>      
     
  void     fun(char     p1[],char     p2[])      
  {int     i,j;      
  for(i=0;p1[i];i++);         /*这个分号一定要有,否则的话#·¥%*¥%#¥·*/      
  for(j=0;p2[j];j++)      
  p1[i++]=p2[j];      
  p1[i]='\0';      
  /*strcat(p1,p2);*/      
  }      
  main()      
  {     char     s1[80],s2[80];      
  clrscr();      
  printf("Enter     s1     and     s2:\n");      
  scanf("%s%s",s1,s2);      
  printf("s1=%s\n",s1);      
  printf("s2=%s\n",s2);      
  printf("Invoke     fun(s1,s2):\n");      
  fun(s1,s2);      
  printf("After     invoking:\n");      
  printf("%s\n",s1);      
  }      
     
  第一次见在for后加";",不好意思!          
  拿来与大家一起分享!(别说我太菜,哈哈!) 问题点数:20、回复次数:23Top

1 楼aminconi(完美缺陷)回复于 2006-09-07 11:07:34 得分 2

第一个for循环就是给i赋值,满足p1[i]=='\0';Top

2 楼wuchun()回复于 2006-09-07 11:13:12 得分 2

for(i=0;p1[i];i++);         /*这个分号一定要有,否则的话#·¥%*¥%#¥·*/      
   
  此处分号当然要,第一:此条语句是使p1[i]中i移到  
  字符串尾;第二:若丢失该分号则会出现语法错误:它将与下一个for语句  
  一起构成两重循环Top

3 楼eeyyllehs(刀客又见刀客:知我者谓我心忧,不知我者谓我何求?过去只是一种经历,并不是一种负担.)回复于 2006-09-07 11:16:11 得分 0

第一次看到...  
  后面的分号代表一个空语句,执行的都在FOR里面呢...Top

4 楼sumjohn()回复于 2006-09-07 11:58:48 得分 1

直接就在p1里加上p2,不安全,容易内存越界Top

5 楼codearts(代码艺术)回复于 2006-09-07 12:32:02 得分 2

其实就是把位置移到   p1的\0处,不过风格有些不好  
   
  for(i=0;p1[i];i++)  
      NULL;  
   
  这样就不会让人误会了Top

6 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-09-07 13:28:05 得分 2

for(i=0;p1[i];i++);         /*这个分号一定要有,否则的话#·¥%*¥%#¥·*/      
  for(j=0;p2[j];j++)      
  实际上就是执行的判断语句  
  while(p1[i]!='\0')i++  
  while(p1[j]!='\0')j++;Top

7 楼steedhorse(晨星)回复于 2006-09-07 13:34:21 得分 0

一个“;”前面什么也没有(for自己后面不需要分号的),就是一条啥也不做的空语句,这有什么奇怪的。  
  再比如:  
   
  int   f()   {  
          ;;;;;  
          return   0;  
  }  
  上面这个函数有5条空语句。Top

8 楼fytzzh(我爱summer)回复于 2006-09-07 13:39:09 得分 1

主要作用就是计算i的值,使i=strlen(p1)Top

9 楼steedhorse(晨星)回复于 2006-09-07 13:41:16 得分 1

for(i=0;p1[i];i++);  
  ——就表示在i++的过程中啥也不做,直等到p1[i]“不成立”,即p1[i]   ==   0。Top

10 楼kangji(尾鱼头)回复于 2006-09-07 13:44:24 得分 1

;是空语句  
  Top

11 楼eaf(细水常流)回复于 2006-09-07 15:05:02 得分 0

长见识了!!!Top

12 楼thelee(风继续吹)回复于 2006-09-07 16:02:30 得分 0

for(i=0;p1[i];i++);      
  不就是   i   =   strlen(p1)嘛,   干嘛写成FOR呢....Top

13 楼mathe()回复于 2006-09-07 16:13:05 得分 1

这个不奇怪,让我想起一段计算Pi的代码:  
  int   a=10000,b,c=2800,d,e,f[2801],g;      
  main()   {    
  for(;b-c;)    
          f[b++]=a/5;    
  for(;d=0,g=c*2;c   -=14,printf("%.4d",e+d/a),e=d%a)      
          for(b=c;   d+=f[b]*a,f[b]=d%--g,d/=g--,--b;   d*=b);    
  }    
  Top

14 楼allanzhou9527(其实我是一个演员)回复于 2006-09-07 16:37:30 得分 0

其实我是看到你跟我的昵称是一样的才回的Top

15 楼strawmanbobi(strawmanbobi)回复于 2006-09-07 17:33:26 得分 1

不加分号是嵌套循环啊,呵呵  
  这样语义就不正确了,一个分号表示空语句。其实这个问题这样写会好一些  
  int   i=0;  
  while(p1[i]!='\0')  
  {  
          i++;  
  }  
  ...  
  建议用字符指针,看上去舒服些Top

16 楼zhuxianfeng1dj()回复于 2006-09-07 18:26:29 得分 0

这种程序不具有可读性,根本不符合编码规范!鉴定完毕Top

17 楼mathe()回复于 2006-09-07 18:39:09 得分 1

其实可读性都一样,只是你们不习惯而已。Top

18 楼HeartLost()回复于 2006-09-07 19:34:56 得分 1

for(i=0;p1[i];i++);   <---人家至少还做点什么  
   
  int   f()   {                      
          ;;;;;                       <---您5个";"什么都没做...  
          return   0;  
  }  
  Top

19 楼afgkidy(到处转悠找MONEY)回复于 2006-09-07 21:36:31 得分 1

for(i=0;p1[i];i++);         /*这个分号一定要有,否则的话#·¥%*¥%#¥·*/      
  等价于  
  for(i=0;p1[i];i++)  
  {}  
       
  Top

20 楼coldwindtang(风)回复于 2006-09-08 00:02:07 得分 1

其实没有什么的,上面很多人已经讲得很详细了。  
   
  即使不写NULL,我个人觉得这种情况最好还是另起一行写一个单独的  
  ;号,这样风格会好一些。Top

21 楼wannasunny(高慢)回复于 2006-09-08 07:56:26 得分 0

这是一个蹩脚的程序!坚定完毕!Top

22 楼redstorm_fyy()回复于 2006-09-08 09:32:20 得分 1

for(i=0;p1[i];i++);是个糟糕的风格,至少应该写成  
  for(i=0;p1[i];i++)  
          ;/*void*/  
  或者  
  for(i=0;p1[i];i++)  
          NULL;  
  才能让人看清楚!Top

23 楼steedhorse(晨星)回复于 2006-09-08 09:41:13 得分 1

对,还是另起一行写空语句,或者打一对“{}”比较好。Top

24 楼harrisecho(灰姑娘)回复于 2006-09-08 10:48:24 得分 0

这个不奇怪,让我想起一段计算Pi的代码:  
  int   a=10000,b,c=2800,d,e,f[2801],g;      
  main()   {    
  for(;b-c;)    
          f[b++]=a/5;    
  for(;d=0,g=c*2;c   -=14,printf("%.4d",e+d/a),e=d%a)      
          for(b=c;   d+=f[b]*a,f[b]=d%--g,d/=g--,--b;   d*=b);    
  }    
  -----------------------------------  
  没看明白,谁能给解释一下,谢谢Top

相关问题

关键词

得分解答快速导航

  • 帖主:duanjunfeng
  • aminconi
  • wuchun
  • sumjohn
  • codearts
  • wanfustudio
  • fytzzh
  • steedhorse
  • kangji
  • mathe
  • strawmanbobi
  • mathe
  • HeartLost
  • afgkidy
  • coldwindtang
  • redstorm_fyy
  • steedhorse

相关链接

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

广告也精彩

反馈

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