| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4368 人关注过本帖
标题:[求助]if(*p) continue什么意思
只看楼主 加入收藏
tanjinglei
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-15
收藏
 问题点数:0 回复次数:8 
[求助]if(*p) continue什么意思

请各位帮忙看一下蓝体字函数,其中红体标出的部分*p代表什么意思啊?
能不能去掉if(*p)这些代码,只留continue呢?
粉红色部分:我感觉这里p所指的肯定不是字母字符了,那么可不可以去掉while句只留p++呢?
我的以上说法有错误吗?

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>

char WORD[10][10] = {"you", "for", "your", "on", "no","if","the","in","to","all"} ;
char xx[50][80] ;
int yy[10] ;
int maxline = 0 ; /* 文章的总行数 */

int ReadDat(void) ;
void WriteDat(void) ;

void ComWord(void)
{
int i, j, k ;
char word[21], *p ;
for(i = 0 ; i < maxline ; i++) {
p = xx[i] ;
j = 0 ;
memset(word, 0, 21) ;
while(*p) {
if(isalpha(*p)) {
word[j++] = *p++ ;
if(*p) continue ;
}
for(k = 0 ; k < 10 ; k++)
if(stricmp(word, WORD[k]) == 0) {
yy[k]++ ;
break ;
}
j = 0 ;
memset(word, 0, 21) ;
while(*p && (!isalpha(*p))) p++ ;
}
}
}

void main()
{
int i ;

for(i = 0 ; i < 10 ; i++) yy[i] = 0 ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开!\n\007") ;
return ;
}
ComWord() ;
WriteDat() ;
}

int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
char *p ;

if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
while(fgets(xx[i], 80, fp) != NULL) {
p = strchr(xx[i], '\n') ;
if(p) xx[i][p - xx[i]] = 0 ;
i++ ;
}
maxline = i ;
fclose(fp) ;
return 0 ;
}

void WriteDat(void)
{
FILE *fp ;
int i ;

fp = fopen("out.dat", "w") ;
for(i = 0 ; i < 10 ; i++) {
printf("%s=%d\n", strupr(WORD[i]), yy[i]) ;
fprintf(fp, "%d\n", yy[i]) ;
}
fclose(fp) ;
}

搜索更多相关主题的帖子: continue 
2007-08-26 22:21
tanjinglei
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-15
收藏
得分:0 
怎么没人理呢?无奈,只好自己揣么了。好长时间才明白。贴出来思考的结果。
主要是因为每一行最后的回车。如果要查找的单词位于某行的最后,那么,如果没有if(*p) continue,它将不会被统计。为什么呢?,
我认为可能是因为字符串在内存中最后的'\0'。假设某行的最后一个单词时the,那么当p指向e时,将e传递给word后,p将指向'\0'。如果没有if(*p)的话,继续continue,后面的判断将不会执行。然后指向while,注意!这时的p是指向'\0',不满足while的条件,所以while 语句不会在执行,直接通过i换行。那么,最后的单词the将没有机会比较。
那么加上if(*p),因为此时的p指向'\0',if条件不成立,故继续循环体内的步骤,而不会跳出到下一个循环。这样the就会进行比较。
2007-08-27 14:18
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
一会给你看看

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2007-08-27 14:20
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
if(*p) continue
等价
if(*p!=0) continue
2007-08-27 14:30
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

while(*p && (!isalpha(*p))) p++ ;
当*p含有字符并其中不含有英文字母 地址加一指向


You have lots more to work on! Never give up!c language!
2007-08-27 14:36
tanjinglei
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-15
收藏
得分:0 

看了二位回答,感觉又明白了一些。谢谢!

请问栖柏,如果p指向'0',那算不算含有字符,应该不算吧!

2007-08-27 14:47
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

指向‘0’这个字符?算啊


You have lots more to work on! Never give up!c language!
2007-08-27 14:49
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以下是引用tanjinglei在2007-8-27 14:47:02的发言:

看了二位回答,感觉又明白了一些。谢谢!

请问栖柏,如果p指向'0',那算不算含有字符,应该不算吧!

'0'和0不一样,0和'\0'在数值上一样,但'0'和'\0'都是一个字符

2007-08-27 14:49
tanjinglei
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-15
收藏
得分:0 

请问二位:下面一行字符
kd jfk ljf gjlk jkl jhgjdl回车符

把这行字符读入内存,那么在内存中怎么存在?最后一个l后一位是不是个'\0'呢?

2007-08-27 17:29
快速回复:[求助]if(*p) continue什么意思
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017130 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved