4

私はCに非常に慣れておらず、Cの最も基本的なアイデアに問題があります。構造を開始しています。基本的に、作業中の割り当ては、区切られたファイルを読み取り、内容を構造に保存することです。ファイルの最初の行にはエントリの数が含まれており、現時点で実行しようとしているのは、プログラムにその数を読み取って保存し、印刷することです。CIについて何も知らないと思い込まないでください。これは本当に新しいことです。

このコードは私にセグメンテーション違反を与えています

#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

みんなのコメントをありがとう、ジムに申し訳ありませんが、彼らは大いに役立ちました。私はほとんど睡眠に取り組んでおらず、誰かを怒らせるつもりはありませんでした。私たちは皆、そこにいたと確信しています。

4

1 に答える 1

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)に解析します

于 2012-10-01T01:06:20.753 に答える