C - Fgets &Scanf 从文本文件中读取

标签 c file format scanf fgets

#include <stdio.h>

int main() {
FILE *f;
unsigned int num[80];
int i=0;
int rv;
int num_values;

f=fopen("values.txt","r");
if (f==NULL){
    printf("file doesnt exist?!\n");
    return 1;
}

while (i < 80) {
    rv = fscanf(f, "%x", &num[i]);

    if (rv != 1)
        break;

    i++;
}
fclose(f);
num_values = i;

if (i >= 80)
{
    printf("Warning: Stopped reading input due to input too long.\n");
}
else if (rv != EOF)
{
    printf("Warning: Stopped reading input due to bad value.\n");
}
else
{
    printf("Reached end of input.\n");
}

printf("Successfully read %d values:\n", num_values);
for (i = 0; i < num_values; i++)
{
    printf("\t%x\n", num[i]);
}

return 0

}

从另一个问题中获取了上面的代码,但是有问题对其进行编辑以满足我的要求,每次我更改它似乎到处都会出错。

这也只是一个简单的更改。

文件的输入示例为 12345678

87654321

1234567811

12345678

当使用此方法从文件中读取时,当我只想获取前 8 个十六进制数字并保存它们时,请获取每一行的全部内容。

我尝试使用 fgets 来获取该行,然后使用 scanf 对其进行格式化,但错误却失控了。

我脑子里有但不知道如何实现的想法是 1.打开文件

  1. f获取当前行

  2. scanf 格式化当前行

    • 获取前 8 位数字

    • 将它们保存到数组

  3. 循环直到文件末尾(而不是像上面代码中的 <80)

我是 c 语言的新手,并且习惯了 java。

最佳答案

尝试

char buffer[201];
while (fgets(buffer, 200, f) != NULL)
{
  if (strlen(buffer) > 7)
  {
     buffer[8] = 0;
     sscanf(buffer, "%x", &num[i++]);
  }
  else
  {
     /* report that the line is error ?! */
  }
}

关于C - Fgets &Scanf 从文本文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232150/

相关文章:

java - 计算文件中与 String [ ] 中的单词匹配的单词数

c - fgetc 在识别新行时停止 (\n)

java - java中的日期只有年份

c - 服务器 key 交换消息 EAP-TLS 中的服务器公钥

c - *完全*相等的 double 为 (a==b) 返回 0

C:更改列表的下一个指针

java - 如何将txt文件中的行转换为字符/字符串流

c - opencv 3 : CVcreatebutton gives LNK2019 error

vim - 'gq' 命令将注释行与非注释行合并

java - 使用 Eclipse 在 Java 中格式化布局