在c中读取文件的第一行

时间:2012-10-01 00:51:56

标签: c pointers structure

我是C的新手,我在使用C中最基本的想法时遇到了问题。我们正在开始构建,基本上我们正在处理的任务是读取分隔文件并将内容保存到结构中。该文件的第一行有条目数,我现在要做的就是让程序读取并保存该数字并将其打印出来。请不要假设我对C一无所知我真的对此很新。

此代码给我一个分段错误

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


struct info{
  char name[100];
  char number[12];
  char address[100];
  char city[20];
  char state[2];
  int zip;
};

int strucCount;
char fileText[1];

int main(char *file)
{
  FILE *fileStream = fopen(file, "r");
  fgets(fileText, 1, fileStream);

  printf("\n%s\n",fileText);

  fclose(fileStream);

}

以下是示例文件

4
mike|203-376-5555|7 Melba Ave|Milford|CT|06461
jake|203-555-5555|8 Melba Ave|Hartford|CT|65484
snake|203-555-5555|9 Melba Ave|Stamford|CT|06465
liquid|203-777-5555|2 Melba Ave|Barftown|CT|32154

感谢大家的评论,他们帮助了很多,对吉姆抱歉。我的睡眠很少,并不意味着冒犯任何人,我相信我们一直都在那里哈哈。

1 个答案:

答案 0 :(得分:3)

建议:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    #define MAXLINE 80
    #define MAXRECORDS 10

    struct info{
      char name[100];
      char number[12];
      char address[100];
      char city[20];
      char state[2];
      int zip;
    };

    int 
    main(int argc, char *argv[])
    {
      FILE *fp = NULL;
      int nrecs = 0;
      char line[MAXLINE];
      struct info input_records[MAXRECORDS];

      /* Check for cmd arguments */
      if (argc != 2) {
        printf ("ERROR: you must specify file name!\n");
        return 1;

      /* Open file */
      fp = fopen(argv[1], "r");
      if (!fp) {
        perror ("File open error!\n");
        return 1;
      }

      /* Read file and parse text into your data records */
      while (!feof (fp)) {
        if (fgets(line, sizeof (line), fp) {
          printf("next line= %s\n", line);
          parse(line, input_records[nrecs]);
          nrecs++;
        }
      }

      /* Done */
      fclose (fp);
      return 0;
    }    
  fclose(fileStream);

}

关键点:

  • 注意使用“argc / argv []”从命令行读取输入文件名

  • line,nrecs等都是局部变量(不是全局变量)

  • 检查“未提供文件名”或“无法打开文件”等错误情况

  • 循环读取数据,直到输入文件结束

  • 将您从文本文件中读取的数据解析为二进制记录数组(TBD)