第一次见在for后加";"
编写一个函数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




