【问题标题】:increment a number in text file, language c [closed]在文本文件中增加一个数字,语言 c [关闭]
【发布时间】:2018-01-18 19:38:55
【问题描述】:

我下面的函数必须在文件中增加一个数字,该数字在开始时不存在。第一个“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

【问题讨论】:

  • 理想情况下,您应该在读取该文件之前测试if (fichier != NULL)未定义的行为 招手。您还应该测试来自fscanf 的返回值,这是为了您的利益而提供的。 if (fscanf(...) != ...) { /* evasive action */ }
  • 您的问题不清楚。 “增量文件”是什么意思?显示输入和所需输出的示例对。
  • 请不要更正发布的代码中的错误,除非它不是您的实际代码。回滚。
  • 我希望只是一个输出,在我的文件中有类似 1 的数字,调用后,返回 2 并将我的文件中的 1 替换为 2 @Yunnosch
  • 如果您在问题中显示输入、预期输出和实际输出,将会有所帮助。通过正式的例子,而不是通过叙述。

标签: c printf scanf fopen


【解决方案1】:

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

#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、...等。

【讨论】:

  • 谢谢!我想我的电脑有问题,因为你的函数返回我11111111111and 1 当我再次调用它时,我可能会在另一台电脑上尝试
  • 你的编译器是什么?我用gcc incfile.c编译这个程序。
  • 删除之前的文件“id.txt”。也许将fopen("file.txt", "w") 更改为fopen("file.txt", "w+")。然后再次编译并运行你的程序。
  • 我正在使用代码块,它使用 classis GNU GCC 编译器
  • 与其他编译器一起工作!再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2011-02-14
  • 2012-02-12
  • 1970-01-01
相关资源
最近更新 更多