一个简单的问题菜鸟免进

fscanf 2004-06-20 12:22:00


#include <stdio.h>

#define _space(p) (*p==' ')

#define syntax(p) (*p==','||*p=='.'||*p=='\\'||*p==':'||*p==';' \
||*p=='"'||*p=='|'||*p=='('||*p==')'||*p=='?' \
||*p=='['||*p==']'||*p=='{'||*p=='}'||*p=='+' \
||*p=='-'||*p=='_'||*p=='*'||*p=='/'||*p=='>' \
||*p=='#'||*p=='@'||*p=='$'||*p=='&'||*p=='!' \
||*p=='`'||*p=='%'||*p=='^'||*p=='*'||*p=='|' \
)


char st[100][32];


int digit(char *p)
{
if(*p>='0'&&*p<='9')
return 1;
else
return 0;
}

int letter(char *p)
{
if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z')
return 1;
else
return 0;
}


void ParseLine(char *p)
{
char *ss=NULL;
char *pp=p;
int i=0;

ss=pp;
while(*pp!='\0')
{
Space:
{
if(_space(pp))
pp++;
ss=pp;
}

Syntax:
{
if(syntax(pp))
pp++;
ss=pp;
}

if(*pp==' ')
goto Space;
if(syntax(pp))
goto Syntax;
while(letter(pp)||digit(pp))
pp++;
strncpy(st[i++],ss,pp-ss);


}
}


main()
{

char text[512];
FILE *fp;
int j;


if((fp=fopen("t.txt","rt"))==NULL)
{
printf("Can Not Open File \n");
exit(1);
}

fgets(text,512,fp);
fclose(fp);
ParseLine(text);

printf("\n");
for(j=0;j<20;j++)
printf("%s\n",st[j]);
}

t.txt的内容
&*ryyu web * () 789uy 234bt

编译通过运行出问题
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
不过人要加上
#include<sring.h>
#include<stdlib.h>

你不加不可能编译通过
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
我的环境仍然正常啊。你是不是win2000?可能是系统问题
fscanf 2004-06-20
  • 打赏
  • 举报
回复
是正常,但是改为


#include <stdio.h>

#define _space(p) (*p==' ')

#define syntax(p) (*p==','||*p=='.'||*p=='\\'||*p==':'||*p==';' ||*p=='"'||*p=='|'||*p=='('||*p==')'||*p=='?' ||*p=='['||*p==']'||*p=='{'||*p=='}'||*p=='+' ||*p=='-'||*p=='_'||*p=='*'||*p=='/'||*p=='>' ||*p=='#'||*p=='@'||*p=='$'||*p=='&'||*p=='!' ||*p=='`'||*p=='%'||*p=='^'||*p=='*'||*p=='|' )


char st[100][32];


int digit(char *p)
{
if(*p>='0'&&*p<='9')
return 1;
else
return 0;
}

int letter(char *p)
{
if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z')
return 1;
else
return 0;
}


void ParseLine(char *p)
{
char *ss=NULL;
char *pp=p;
int i=0;

ss=pp;
while(*pp!='\0')
{
Space:
{
if(_space(pp))
pp++;
ss=pp;
}

Syntax:
{
if(syntax(pp))
pp++;
ss=pp;
}

if(*pp==' ')
goto Space;
if(syntax(pp))
goto Syntax;
while(letter(pp)||digit(pp))
pp++;
strncpy(st[i++],ss,pp-ss);


}
}


main()
{

char text[512];
FILE *fp;
int j;
char filename[128];

printf("Input Open File Name ");
scanf("%s",filename);

if((fp=fopen(filename,"rt"))==NULL)
{
printf("Can Not Open File \n");
exit(1);
}

fgets(text,512,fp);
fclose(fp);
ParseLine(text);

printf("\n");
for(j=0;j<20;j++)
printf("%s\n",st[j]);
}

t.txt的内容
&*ryyu web * () 789uy 234bt

编译通过运行出问题


SeeMin 2004-06-20
  • 打赏
  • 举报
回复
运行正常阿
需要加上#include<sring.h>
#include<stdlib.h>

运行环境win XP
MinGW Studio

运行结果
ryyu
web
789uy
234bt
george 2004-06-20
  • 打赏
  • 举报
回复
你要做的是对一个.tst文件进行word解析吗?
为什么不用strtok()呢?
为什么要写哪儿长的宏定义!
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
晕了还没有人来。。。。。

那在这的是什么!!!!!!!
fscanf 2004-06-20
  • 打赏
  • 举报
回复
没有把我的问题解决
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
这话怎么讲?晕!
fscanf 2004-06-20
  • 打赏
  • 举报
回复
晕了还没有人来
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
大一点的文件?应该是这种dos的空间有限制把......
小文件很正常?

可是大文件也只是读前512个字符阿。。。奇怪中。。。。
welyngj 2004-06-20
  • 打赏
  • 举报
回复
菜鸟进来了。
fscanf 2004-06-20
  • 打赏
  • 举报
回复
是的是WIN2000但是打开一个大一点的文件就会出错
SeeMin 2004-06-20
  • 打赏
  • 举报
回复
int letter(char *p)
{
if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
return 1;
else
return 0;
}

加上括号,可读性好。。。。。。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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