C中一个小小疑惑

proxukun 2009-11-25 08:38:13
#include <stdio.h>
#include <string.h>
void main()
{
char *n,*m;
int i=0;
char aim[50],find[10];
printf("please enter the letters.\n");
gets(aim);
printf("please enter the letters.\n");
gets(find);
n=aim;
m=find;
for (;*n;n++)
;
for (;*m;m++)
;
for (;*n--==*m--;)
if (n==aim||m==find)
break;
if (*n==*m&&m==find&&*n!='\0')
printf("1");
else printf("0");
}

if (n==aim||m==find)
break;
这句是拿来干什么用的啊??好像没什么用处,可是要是删除的话,程序运行就不对了,这是为什么,这句话的作用和具体思路是什么样的??




...全文
216 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tananade 2009-11-28
  • 打赏
  • 举报
回复
你这个程序到底是干啥的我还没搞清楚,不过那个语句就是判断是否越界的
这点没有问题
xujingguo 2009-11-28
  • 打赏
  • 举报
回复
学习学习
liangyonglou 2009-11-26
  • 打赏
  • 举报
回复
果其中一个串已经到起初的首地址了,还没跳出循环,字符串肯定不相等,直接跳出
lxfhfut 2009-11-26
  • 打赏
  • 举报
回复
路过~~~~
木薯超人 2009-11-26
  • 打赏
  • 举报
回复
看错了 用||是正确的
木薯超人 2009-11-26
  • 打赏
  • 举报
回复
7楼正解 JF
数组的名字 = 数组的头地址 = 第一个元素的地址 新手这么理解就可以了
两个for分别把他们指向了数组的最后一个元素 第三个 FOR从后向前边沥数组元素
||表是只要有一个条件是真的就是真的 感觉有问题换&&把
这个程序是判断哪个字符串长么
DLevel 2009-11-26
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <string.h>
void main()
{
char *n,*m;
int i=0;
char aim[50],find[10];
printf("please enter the letters.\n");
gets(aim);
printf("please enter the letters.\n");
gets(find);
n=aim;
m=find;
for (;*n;n++) //
;
for (;*m;m++) //n和m分别指向aim,find所对应字符数组的最后一个字('\0');
;
for (;*(n--)==*(m--);) //合并了判断条件和退出条件,下边的代码是在这个循环里边吧,循环改写成这样就比较一幕了然 break就是死循环或者某一个空间蒙dui了退出
if (n==aim||m==find) //n=aim || m==find 说明从后往前已经到头了,要跳出来了.
break;
if (*n==*m&&m==find&&*n!='\0') //当*m=*n时候貌似永远执行else
printf("1");
else printf("0");
}
b_what_u_wanna_b_8 2009-11-26
  • 打赏
  • 举报
回复
不好意思,是一楼
b_what_u_wanna_b_8 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
if (n==aim||m==find)
break;
——如果哪一个到了字符串的头,就退出循环,没有这句就要越界了
[/Quote]

二楼说对了,这个事判断越界的,
guangge2008 2009-11-25
  • 打赏
  • 举报
回复
c里面的“&&”规则本来就是从左到右判断的,如果第一个条件假,后面的就直接跳过不作处理,总的原则是假一则全假。不知道这样回答了你的问题没有?
wbandzlhgod 2009-11-25
  • 打赏
  • 举报
回复
我调试啦!
好像是片段第一次出现不相等的 就执行 else语句

我也不怎么理解啊!!期待高手吧!

#include <stdio.h>
#include <string.h>
void main()
{
char *n,*m;
int i=0;

char aim[50],find[10];

printf("please enter the letters.\n");
gets(aim);

printf("please enter the letters.\n");
gets(find);

for (n=aim; *n ; n++);
for (m=find; *m ; m++);

for (;*n--==*m--;)
if (n==aim||m==find)
break;

if (*n==*m && m==find && *n!='\0')
printf("1");

else
printf("0");
}
basketballn 2009-11-25
  • 打赏
  • 举报
回复
如果其中一个串已经到起初的首地址了,还没跳出循环,字符串肯定不相等,直接跳出
昵称很不好取 2009-11-25
  • 打赏
  • 举报
回复
if (n==aim||m==find)
break;
——如果哪一个到了字符串的头,就退出循环,没有这句就要越界了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧