我正在开发一个实用程序,它扫描多个文本文件,提取相关文本并将其转储到另一个文本文件中。
int main()
{
// file I/O code
node *temp1;
char script[255],segName[255],ch;
char *dev;
FILE *fp;
int i=0;
void removeSpace();
dev=getenv("DEVSET");
devset = atoi(dev);
//clearing the file before starting
fp=fopen("output.txt","w");
fclose(fp);
memset(script,'\0',sizeof(script));
strcpy(script,"main"); // start with main
head=createNode(script); // head is a global node*
head->prev=NULL;
head->next=NULL;
temp1 = head;
while(temp1 !=NULL)
{
read(temp1, script);// reads the text file corresponding to temp1 and returns relevant data
memset(segName,'\0',sizeof(segName));
if (strcmp((temp1->name),"main"))
{
//if not main, start on a new line
segName[0]='\n';
}
if (strcmp(script,"EOF")== 0 || strcmp(script,"")== 0 )
{
// end of file or Call not found
temp1 = pop(head);
}
else
{
if (strcmp(script,"exit_flow") == 0)
{
fp=fopen("output.txt","a");
fprintf(fp,"//FNF");
fclose(fp);
temp1=pop(head);
}
else
{
//Call found
for(i=0;i<script_index;i++) // script index is a global int
{
strcat(segName,"-"); // no of dashes indicate depth of the call
}
strcat(segName,"<");
i=strlen(segName);
segName[i]=call_type;
strcat(segName,">");
strcat(segName,(script));
fp=fopen("output.txt","a");
fprintf(fp,segName);
fclose(fp);
script_index++;
temp1=createNode(script);
push(head,temp1);
}
}
}// end of while
// Adjustment to remove extra spaces from the file
removeSpace();
fclose(fp);
if(!devset)
printf("\nExecution complete");
printf("\nResult dumped to \"output.txt\"");
printf("\nOpen the output file? ");
fflush(stdin);
ch=getchar();
if (ch == 'y' || ch == 'Y')
{
system("notepad output.txt");// Text file displayed has correct data here
}
return 0;
}
上面提到的是部分主要()。
在执行'system'语句后,文件的内容会被修改,但似乎不太可能。 虽然我在执行'system'之前关闭了文件,但是字符串(不完全是随机的)会附加到文本文件中。
环境 - 窗口
IDE- Code :: Blocks
编译器 - MinGW
这是因为我没有冲洗一些缓冲区吗?
答案 0 :(得分:0)
您的示例不完整,但您的程序可能是(a)打开文件进行写入,(b)向其写入一些数据,(c)调用记事本让用户查看文件,以及(d)离开。
但是:当程序退出时,将刷新所有未写入的数据,并关闭所有打开的文件。这可能是最后一次隐式刷新/关闭,它附加了你所询问的额外数据。
在致电fflush(outputfile)
之前,请尝试拨打fclose(outputfile)
或system
。
答案 1 :(得分:0)
我仍然不明白发生了什么,但这是第二个答案。请按照以下步骤操作。
fopen
,fflush
和fclose
的每次电话
程序。每个人。fopen
添加一个电话,打开output.txt
进行写入。请勿使用追加('a'
)模式。fclose
打开记事本之前,在程序结束时向system
添加一个电话。这应该使你的程序表现得更明智(并且也更容易理解)。