【问题标题】:fgetc omit characters and then assign integerfgetc 省略字符然后分配整数
【发布时间】:2013-05-24 15:14:15
【问题描述】:

我有一个文件 data.dat

HI5 LO2

我想从中读取 5 和 2,并将它们存储为 uint16s。我写过

#include <stdio.h>
int main()
{
    unsigned short int high;
    FILE *pFile;
    pFile = fopen("data.dat", "r");
    int c;
    while(c != 'I')
    {
        c = fgetc(pFile);
    }
    high = while(c != ' ')
    {
        c = fgetc(pFile);
    }
    printf("%i\n", high);
    if(c == ' '){puts("we read until 1st line space");}
    else{puts("we didn't read until 1st line space");}
    fclose(pFile);
    return 0;
}

high 被分配给一个 while 循环,因为我们可能会得到更大的数字,比如 10,但是这样做会产生错误。如何从文本文件中的值分配整数?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读FAQ。我观察到您希望将值存储在某种uint16 变量中,但不要声明任何此类变量。此外,uint16 不是标准 C (ISO/IEC 9899:2011) 未定义的“标准”类型。它有条件地定义了相关类型uint16_t——如果平台没有 16 位无符号整数,则不必定义它。你确实定义了一个unsigned short;这大约相当于uint16,但最好了解很多编程都是关于一致性的。

标签: c file-io fgetc


【解决方案1】:

改用fscanf()

unsigned short i[2];
/* fscanf() returns number of successful assignments made,
   which must be 2 in this case. */
if (fscanf(pFile, "HI%hu LO%hu", &i[0], &i[1]) == 2)
{
}

如果文件有多行,请使用fgets() 逐行读取并使用sscanf() 从每行中提取整数值。

始终检查 IO 操作的结果,例如 fopen() 不返回 NULL

【讨论】:

  • %u 需要一个指向 unsigned int 的指针,而不是 unsigned short
  • %u 不期望直接指向任何东西的指针,它只是一个unsigned int,如何解释unsinged int 是在程序员手中。
猜你喜欢
  • 2018-10-06
  • 1970-01-01
  • 2018-09-29
  • 2019-01-13
  • 2014-01-08
  • 1970-01-01
  • 2013-09-15
  • 2016-06-26
  • 1970-01-01
相关资源
最近更新 更多