对于文件的读写操作
#include<stdio.h>
#include "scanner.h"
int main()
{
FILE * file;
file = fopen("abc.txt","r");
if(file == NULL)
printf("The file is note exist!");
WORD * wPtr = wordScanner(file);
//printf("%d---%s\n",wPtr->code,wPtr->word_meaning);
while(1)
getchar();
return 0;
}
完成一个文件的输出,WORD类型的函数
void file_write(char *word)
{
FILE * file;
file = fopen("out.txt","a");
fprintf(file,"%s",word);
fclose(file);
}
这个是文件的写入
WORD * wordScanner(FILE * file)
{
int i;
char a[10000]; //定义txt转化所有的文本
int num[100][100];
char letter[100][100];
WORD *ret = new WORD();
char ch = NULL;
char variable[20] ;
char *des;//存储description描述
int state = 0;
int n = 0;
while(ch != EOF)
{
ch = fgetc(file);
//处理注释 46
if(ch == '/')
{
ch = fgetc(file);
if(ch == '/')
{
//文件末不是换行符\n
while( ch != '\n')//ch!= ' ' &&
{
ch = fgetc(file);
//nothing happen
}
ret->code = LINE_ZHUSHI;
ret->word_meaning = "//";
char str[100];
sprintf(str, "%d---%s\n", ret->code,ret->word_meaning);
file_write(str);
}
//注释分割47+48
else if(ch == '*')
{
ch = fgetc(file);
ret->code = L_ZHUSHI;
ret->word_meaning = "/*";
char str[100];
sprintf(str, "%d---%s\n", ret->code,ret->word_meaning);
file_write(str);
while(1)
{
while( ch != '*')
{
ch = fgetc(file);
}
ch = fgetc(file);
if(ch == '/')
{
ret->code = R_ZHUSHI;
ret->word_meaning = "*/";
char str[100];
sprintf(str, "%d---%s\n", ret->code,ret->word_meaning);
file_write(str);
//return /* 和 */
break;
}
}
}
}
}
这个就是ch在fgetc(file)作为指针头的用法,其中file是fopen()的指针类型
其次,指针头的变化,fgetc是下一个,fseek是偏移,例:fseek(file,-1,1)就是从当前位置往后走-1位(回退一位)
fseek(a,b,c) a是文件指针,b是偏移量,向后为正,回退为负,c是设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;
fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。