【问题标题】:c read float from file and sortc 从文件中读取浮点数并排序
【发布时间】:2011-02-15 00:22:06
【问题描述】:

我的 C 应用程序有问题;我在 .txt 文件中有一些浮点数,我必须阅读它们并以降序方式排序。当我执行 fscanf 命令然后执行 printf 时,我会在屏幕上看到奇怪的数字(我想是内存位置)。我该如何解决这个问题? 提前致谢

已编辑 应用程序由 1200 多行代码组成;问题来了:

.......
fopen=(fp1,"scores.dat","r")
fopen=(fp2, "team_number.dat", "r")
fscanf(fp2,"%d", &x);
for (i=0;i<x;i++) {
fscanf(fp1,"%f", &punteggi)
printf("%3.1f\n", punteggi)
}
......

【问题讨论】:

  • 代码和示例输入文件甚至是尝试回答这个问题的最低要求......
  • 您的 .txt 文件中有多少个数字? .txt 文件大吗?
  • 如果您发布一些代码,它会更容易帮助您。另外,应用程序还需要做其他事情吗?您可以使用 unix 命令 sort -n 执行您所描述的操作
  • 我用“不工作”代码编辑了问题
  • fopen=(fp1, 替换为FILE* fp1 = fopen(。如果punteggidouble,则使用%lf。检查fscanf() 是否返回1(成功扫描的项目数。使用fgets/sscanf 能够打印导致错误的行。

标签: c sorting file scanf


【解决方案1】:

使用 fscanf() 从文件中读取的问题是它非常敏感,如果格式说明符以某种小方式与数据不匹配,您要么得到垃圾回收要么堆栈/内存覆盖。您没有显示您的数据看起来如何,因此很难说出格式说明符应该如何......例如,如果您之间有空格并且是否有换行符 - 您可能需要将宽度指定为好吧,如果值之间没有空格。

更简单的方法是使用 fgets()(或 fread)读取,然后,如有必要,使用 strok() 解析字符串,然后将标记转换为所需的类型(在您的情况下为 atof)。

【讨论】:

    【解决方案2】:

    确保为fscanf 提供左值(例如,如果a 是浮点数,则不是fscanf("...",a);,而是fscanf("...",&amp;a);

    printf 读取的是实际数字,而不是指针或左值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多