C函数修改文本文件

C函数修改文本文件,c,C,此函数用于修改增加1个字符的文件。我用一个只有“abcde”的.txt文件测试了它。结果是一个永远不会结束的过程,一个以“b”开头的大文件,以大量的“c”继续,以另一个“b”结束。调试时我发现问题出在循环中的“fgetc(file);”。在第二次迭代中,它总是得到“b”。我使用MinGW和代码块。我不明白哪里出错了。非常感谢并抱歉使用英语。使用: 而((c=fgetc(文件))!=EOF)并对文件2执行fputc,而不是对同一文件 post到另一个不相同的文件,从a.txt读取并写入b.txt,

此函数用于修改增加1个字符的文件。我用一个只有“abcde”的.txt文件测试了它。结果是一个永远不会结束的过程,一个以“b”开头的大文件,以大量的“c”继续,以另一个“b”结束。调试时我发现问题出在循环中的“fgetc(file);”。在第二次迭代中,它总是得到“b”。我使用MinGW和代码块。我不明白哪里出错了。非常感谢并抱歉使用英语。

使用:


而((c=fgetc(文件))!=EOF)并对文件2执行fputc,而不是对同一文件

post到另一个不相同的文件,从a.txt读取并写入b.txt,您还可以在char buffer[]中读取文件并执行char[i]++;要将缓冲区中的所有字符增加为1,然后将缓冲区[]写入文本文件,您不需要通过charI读取char。我会尝试一下,这似乎很有帮助。谢谢。你为什么打电话给fflush?@doogabides让它来确定写入文件的时间。我认为没必要。IO应该被缓冲以提高性能。你将阅读下一个字符,所以谁在乎你后面的字符是现在更新还是以后更新。@doogabides可能,如果你不
fflush
,这个程序就不能正常工作。我不知道为什么需要fflush,但它解决了问题!
int cripta(string nomef) {  
    FILE* file=fopen(nomef, "r+");  
    if (file==NULL)  
        return error;  
    char c;  
    long pos;  
    pos = ftell(file);  
    c=fgetc(file);  
    while (c!=EOF) {  
        fseek(file, -1, SEEK_CUR);  
        pos = ftell(file);  
        c++;  
        fputc(c, file);  
        pos = ftell(file);  
        c=fgetc(file);  
        pos = ftell(file);  
    }  
    fclose(file);  
    return done;  
}
char c;  
long pos;  
pos = ftell(file);
c=fgetc(file);
while (c!=EOF) {
    fseek(file, pos, SEEK_SET);
    fputc(++c, file);
    fflush(file);
    pos = ftell(file);
    c=fgetc(file);  
}