在文本文件中增加一个数字,语言c

时间:2018-01-18 19:38:56

标签: c printf scanf fopen

我的下面的函数必须在文件中增加一个数字,这在开头不存在。第一个“if”是文件为空时,第二个是在我的文件中生成“id ++”并返回它,但是这个增量不起作用,如果我调用4次函数,则返回“0101” 。谢谢你的帮助。

int genererId(){
int id=0;
FILE * fichier = fopen("id.txt","w");
fclose(fichier);
fichier = fopen("id.txt","r");
if (fichier != NULL){

    if(fscanf(fichier,"%d",&id)!=EOF){
        fclose(fichier);
        FILE * fichier = fopen("id.txt","w");
        fprintf(fichier, "%d", 1);
        return 1;
    }else{
        printf("%d",id);
        fclose(fichier);
        FILE * fichier = fopen("id.txt","w");
        id++;
        fprintf(fichier, "%d",id);
        fclose(fichier);
        return id;
    }
}

return -1;
}


int main(){
    printf("%d",genererId());
    printf("%d",genererId());
    printf("%d",genererId());
    printf("%d",genererId());
    printf("%d",genererId());
    printf("%d",genererId());
    printf("%d",genererId());
}

当前输出:01010101010101 预期输出:1234567

1 个答案:

答案 0 :(得分:3)

我认为你想要的是这样的:

#include <stdio.h>

int genID()
{
    int val ;
    FILE * fp = fopen("file.txt", "r") ;
    if (!fp) {
        fp = fopen("file.txt", "w") ;
        if (!fp) return -1 ; // fail
        fprintf(fp, "%d", 1) ;
        fclose(fp) ;
        return 1;
    }
    fscanf(fp, "%d", &val) ;
    val++;

    fclose(fp); // close file for read
    fp = fopen("file.txt", "w") ; // reopen for write
    fprintf(fp, "%d", val) ;
    fclose(fp) ;
    return val ;
}

int main() {
    printf("%d", genID()); // 1
    printf("%d", genID()); // 2
    printf("%d", genID()); // 3
    return 0 ;
}

下一次运行将得到4,5,6,......等。