【问题标题】:Reading and writing of two digit value to file in C在C中读取和写入两位数值到文件
【发布时间】:2013-06-14 19:33:49
【问题描述】:

我正在用 C 语言编写一个业务应用程序,其中我通过将值写入临时文件来跟踪计时器。计数器从 96 开始,一直倒数到 0。逻辑工作正常,除了当它从 10 切换到 9 时,9 只会覆盖 1,所以值不是 10 -> 9,而是 10 - > 90,导致倒计时从这一点开始。有没有办法让我的应用程序成功写入值?

我正在使用以下两个函数来控制输出到文件"

  fprintf(fileFd, "%d" , counter);
  rewind(fileFd);

我将值打印到我的文件中,然后将访问点移回文件头部以获取下一个条目。关于如何做到这一点的任何建议?谢谢大家。

编辑:谢谢大家的建议。我尝试了下面建议的方法,通过调用 %02d 写入两个位置值,并且由于某种原因完全破坏了应用程序。循环根本不会发生......然后当我重新编译时,它仍然无法工作,直到我删除我的临时文件并创建一个新文件。现在,当写入文件时,它在底部(这是一个 UNIX 系统)告诉我文件名,[不完整的最后一行],1 行 2 个字符。这会对指定要写入的位置数量产生任何影响吗?

【问题讨论】:

  • 如果你正在实现一个计时器,你为什么要写入一个文件?
  • 您可以从 196 数到 100。这始终采用相同的位数,您只需在读取后减去 100,然后在写入前添加 100。
  • 对于 Shamim,此计时器用于在第一次检测到错误后 24 小时内跟踪服务器中断,但如果二进制文件重新启动,则计时器将在 24 小时后重新开始。如果二进制文件出现故障,文件中的值将保持该值有效。对于 Lee,我曾想过只使用三位数的值,但感觉很草率……我只是想知道是否有更好的解决方案。

标签: c file-io fopen countdown printf


【解决方案1】:
fprintf(fileFd, "%02d", counter);

【讨论】:

  • 将我的 fprintf 函数更改为 %02d 会导致我的应用程序在我重新编译并运行它时挂起...。写入文件时可能会出现某种冲突吗?
  • 应该不会造成问题。这是它挂的线吗?
【解决方案2】:

检查:

fprintf(fileFd, "%02d" , counter);

【讨论】:

    【解决方案3】:

    写入占用一定位数的文件,未使用的位数用0填充。

    fprintf(fileFd, "%07d", counter);
    

    以上代码将允许时间值最多为 7 位。

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 2020-04-16
      • 2012-09-30
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2017-06-22
      相关资源
      最近更新 更多