请问从文件中读一行 用下面方法为什么不队?我用的是vc++编译器
while(!feof(fp))
{ j=0;
while((ch[j++]=fgetc(fp))!=(EOF||'/0'))
}
乱码呀,看不清....
这样好象也不行啊?
这是一个关于编译的词法分析的程序。大家都帮忙看看吧 谢谢了
#include<stdio.h>
void main()
{
FILE *fp;
int i,j,k,l,m,t=0,error[100]; //t 为行数;
char a[100][10]; // 存 scan后的字串
char filename[20],ch[100];//failname文件名数组 ch缓冲数组;
f1:
scanf("%s",filename);
if((fp= fopen(filename,"r"))==NULL)//打开文件;
{
printf("can not find this file\n");
goto f1;
}
while(!feof(fp))
{ j=0;
while(((ch[j++]=fgetc(fp))!='\0')||((ch[j++]=fgetc(fp))!=EOF))//读一行
/*ch[0]=fgetc(fp);
while(ch[j]!='/0'){j++;ch[j]=fgetc(fp);}*/
t++;
i=0;k=0;l=0;
while(i<=j) //j是缓冲区最后一个数的下标;
{
if(ch[i]==' ')i++;
else if(ch[i]>='0'&&ch[i]<='9') //判数字
{
a[l][k]=ch[i]; //读第一个字母
while(ch[i+1]>=48&&ch[i+1]<=57)//判断下一个字符
{
k++;i++;
a[l][k]=ch[i];
}
if(ch[i+1]==' ')
{
i++;l++;k=0;
}
else
{error[m++]=t;l++;k=0;i++;}
}
else if(ch[i]>='a'&&ch[i]<='z'||ch[i]>='A'&&ch[i]<='Z')//判字串
{a[l][k]=ch[i];
while(ch[i+1]>='a'&&ch[i+1]<='z'||ch[i+1]>='A'&&ch[i+1]<='Z'||ch[i+1]>='0'&&ch[i+1]<='9')
{
k++;i++;
a[l][k]=ch[i];
}
if(ch[i+1]==' ')
{
i++;l++;k=0;
}
else
{error[m++]=t;l++;k=0;i++;}
}
else if(ch[i]=='<')//判< ,<>, <=
{a[l][k]=ch[i];
if(ch[i+1]=='>'||ch[i+1]=='=')
{
k++;i++;
a[l][k]=ch[i];i++;l++;k=0;
}
else
{i++;l++;k=0;}
}
else if(ch[i]=='>')//
{a[l][k]=ch[i];
if(ch[i+1]=='=')
{
k++;i++;
a[l][k]=ch[i];i++;l++;k=0;
}
else
{i++;l++;k=0;}
}
else if(ch[i]==':')//:=
{a[l][k]=ch[i];
if(ch[i+1]=='=')
{
k++;i++;
a[l][k]=ch[i];i++;l++;k=0;
}
else
{error[m++]=t;i++;k=0;}// no l++ because need cover;
}
else if(ch[i]=='+')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='-')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='*')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='/')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='=')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='(')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]==')')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]==',')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]==';')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='.')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else if(ch[i]=='\0')//
{a[l][k]=ch[i];
i++;l++;k=0;
}
else
error[m++]=t;i++;
for(i=0;i<=l;i++)
puts(a[i]);
printf("\n");
}
}
}
请客气些,你是在求人,不是在用人. 论坛出乱码是常事,我刷了好几次都看不到你写的是什么...
下面是用C写的,你改改就是C++的了!!
#include <stdio.h>
main()
{
char a[80],filename[20];
int i;
FILE *fp;
printf("\nInput filename:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{printf("\nOpen file error!");exit(-1);}
for(i=0;fgetc(fp)!='\n';++i);
rewind(fp);
fgets(a,i,fp);
fclose(fp);
puts(a);
}