C语言问题,请看题:

来源:百度知道 编辑:UC知道 时间:2024/07/08 04:40:26
函数fun的功能是:逐个比较p,q所指2个字符串对应位置中的字符,把ASCLL值大或相等的字符依次存放到c
数组中,形成一个新的字符串.
例如,若a中的字符串为:aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH.

这是我写的程序

#include <stdio.h>
#include <string.h>
void fun(char *p,char *q,char *c)
{

int k=0;

while (*p!=*q||*p==*q)
{ if (*p<*q) c[k]=*q;
else c[k]=*p;
p++;
q++;
k++;
}
}

main()
{ char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};
fun(a,b,c);
printf("The string a: "); puts(a);
printf("The string b: "); puts(b);
printf("The result : "); puts(c);
}

后来程序运行后无结果!!

然后我问了别人,别人说把while (*p!=*q||*p==*q)改成while(*p||*q)就行了,那这是为什么了?我感觉我的程序没的问题啊,为什么没结果了?
请各位高手指正!!

循环的条件是:只要a字符串或者b字符串没有结束的话,则进入循环
你写的:while (*p!=*q||*p==*q)实际上等于while(1),因为*p要么不等于*q,要么等于*q,死循环了

(*p!=*q||*p==*q)
等不等于都循环 还要条件干什么
那个不叫没结果 叫死循环

字符串结束符是\0 也就是整形数0 当p q指到结束符的时候 自然就跳出了

while (*p!=*q||*p==*q)

你这个条件
*p!=*q||*p==*q为真直接就没退出循环,怎么会有结果呢

#include <stdio.h>
#include <string.h>
void fun(char *p,char *q,char *c)
{

int k=0,len,i;
int pl,ql;
char*t;
pl=strlen(p);
ql=strlen(q);
if (pl>ql)
{
len=ql;
t=p;
}
else
{
len=pl;
t=q;
}
for (i=0;i<len;i++)
{
if (*p<=*q) c[k]=*q;
else if(*p>=*q) c[k]=*p;
p++;
q++;
k++;
t++;
}
while (*t!='\0')
{
c[k]=*t;
k++;
t++;
}
c[k]='\0';

}

void main()
{ char a[10]="aBCDeFgH",b[10]="ABcd