我想从以下函数中删除最后一个新行:
void WriteToFile(node *tree)
{
void Write(node*);
fp = fopen("dictionary.txt","w");
if(fp==NULL)
{
printf("Cannot open file for writing data...");
}
else //if(tree==NULL)
{
if(tree!=NULL)
{
Write(tree);
}
fclose(fp);
}
}
void Write(node *tree)
{
if(tree!=NULL)
{
fprintf(fp,"%s:%s\n",tree->word,tree->meaning);
Write(tree->left);
Write(tree->right);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此函数将文本文件写入BST的内容,我不希望它写入最后一个新行,我该如何删除它?
在像你这样的递归例程中,你不能轻易知道哪个是最后一个调用,但你可以知道第一个调用是什么.
不是编写数据和可选的换行符,而是考虑编写一个可选的换行符后跟数据:
void FirstWrite(node *tree, FILE *fp)
{
if (tree)
{
fprintf(fp, "%s%s", tree->word, tree->meaning);
Write(tree->left, fp);
Write(tree->right, fp);
}
}
void Write(node *tree, FILE *fp)
{
if (tree)
{
fprintf(fp, "\n%s%s", tree->word, tree->meaning);
Write(tree->left, fp);
Write(tree->right, fp);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,考虑文本模式文件的最常用的行定义是:0或更多字符的序列,包括换行符.根据这个定义,所有线都有换行符; 并且文件中的最后一段数据不是一行.
至少有一个我用过的写得不好的程序因此无法处理整个输入.我的猜测是它有类似的东西
fgets(buf, sizeof buf, inf);
inlen = strlen(buf);
if (buf[inlen - 1] == '\n') processline(buf);
Run Code Online (Sandbox Code Playgroud)
如果最后一条数据包含换行符,这个编写得很糟糕的程序就可以工作.
| 归档时间: |
|
| 查看次数: |
1904 次 |
| 最近记录: |