【问题标题】:fscanf reading and savingfscanf 读取和保存
【发布时间】:2012-09-13 13:35:59
【问题描述】:

我对在 C 中使用文件的知识为零,我正在尝试使用这些数据读取文件

050 1100 051 5100 100 0005

并将数字保存到这样的常量中:

PC   cod  IR      
\/   \/   \/     

050 --- 1 ---- 200
051 --- 5 ---- 100

   Mem[PC]
    \/

100 - 0005

问题是我不知道该怎么做。我只有从读取我的文件并将第一个数据保存到字符缓冲区的书中读取的这段代码,或者至少我认为它是这样做的,但它不会继续处理其余数据。

#include <stdio.h>    
int main(int argc, char **argv)
{
    FILE *fp;    
    char buffer[100];

    fp = fopen("prueba.txt", "r");
    fscanf(fp, "%s", buffer);
    printf("%s", buffer);    
    fclose(fp);    

    return 0;    
 }

这是prueba.txt的内容:

050 1100 051 5100 100 0005

有人可以帮帮我吗?

【问题讨论】:

    标签: c file


    【解决方案1】:

    首先,忘记你听说过fscanf。麻烦多于它的价值。

    其次,我不知道您所说的“将数字保存为常量”是什么意思,但是一般而言,在 C 中做这种事情的正确方法是逐行读取与fgets(或getline,如果有的话)对齐,然后使用strsepstrtoul 从行中提取单个数字。

    第三,从风格上讲,只有一件事比在括号内部放置空格更糟糕,那就是不一致在括号和逗号内部和/或周围放置空格。你会让下一个必须阅读这段代码的人头疼。

    【讨论】:

      【解决方案2】:

      您现在所做的只是读取一个单词,您使用 fscanf 读取并使用 %s 读取它看到的第一个字符串。

      如果你想读取文件中的所有单词,你必须像这样遍历它们:

      while(feof(fp)==0){
      
      fscanf(fp,"%s",buffer);
      *** Do what every action you want to do with your buffer here ***
      }
      

      【讨论】:

      • while(!feof(fp)) { read; process; } 是一种反模式,因为feof 仅在您尝试读取文件末尾而不是仅当您到达 文件的结尾。因此,您将获得代码未准备好处理的失败读取操作。
      猜你喜欢
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多