2017-07-30 82 views
2

このテキストファイルを構造体の配列に読み込もうとしています。ここからテキストが数行あります。テキストファイルを構造体の配列に読み込むC

A|Boston Red Sox|Fenway Park|4 Yawkey Way|Boston|MA|02215|(617) 267-9440|redsox.com 
N|St. Louis Cardinals|Busch Stadium|700 Clark Street|St. Louis|MO|63102|(314) 345-9600|cardinals.com 

ここに構造体の配列があります。テキストファイルを変更して、変更をテストしやすくするためにリーグとチーム名のみを含むようにしました。問題のlies.Iは、難しいこのシナリオで正しく機能を使用しようとしている初心者であることかかわらはstrncpy()を実装しようとしているのはここ

#define LEN_LINE 80 
#define LEN_NAME 30 
#define MAX_LINES 60 
#define LEAGUE_NAME 5 

typedef struct 
{ 
    char leagueName[LEAGUE_NAME + 1]; 
    char teamName[LEN_NAME + 1]; 


} team_t; 

です。

FILE * filePtr; 
    int index, count; 
    char line[LEN_LINE + 1]; 
    team_t teams[MAX_LINES]; 
    filePtr = fopen("MLBteams.txt", "r"); 
    if(filePtr == NULL) 
    { 
     printf("Unable to open file.\n"); 
    } 
    else 
    { 
     index = 0; 
     while(index<MAX_LINES && fgets(line, LEN_LINE, filePtr)) 
     { 
      if(2 == sscanf(line,"%s %s", teams[index].leagueName, teams[index].teamName) 

       ) 
      { 
       index++; 
      } 
     } 
     fclose(filePtr); 

私は混乱したにもかかわらず、他のスレッドを見ました。

+0

分割されます|テキストファイルから別の構造体に変換します。私のコードの問題は、これらの行を読み込むだけです。たとえばBoston Red Soxをチーム[index] .teamNameに読みたい場合は、Bostonのみを保存します。また、リンクのおかげで、私はコードを分解して、それが私を助けるかどうかを調べるつもりです。 –

+0

これは、文字が読み込まれるまでの特別な指定子のようなものです。電話番号や郵便番号などの情報は定数です。文字列として読み込むことができます。どうもありがとうございました。 –

+1

#define LEN_LINEの長さを増やした後、完全に動作しています。 –

答えて

0

あなたのテキストファイルの内容の例から、あなたは|シンボル(A |ボストンレッドソックス)。あなたはsscanfの中に入れる必要があります:

if(2 == sscanf(line,"%s|%s", teams[index].leagueName, teams[index].teamName)) 
{ 
       index++; 
} 

Ok。あなたの文字列には空白があるので、手動でその文字列を解析することはできません。代わりに、コードのabow次の操作を行います。

char *league_p = strchr(line,'|'); 
int len = league_p - line; 
char *league = calloc(len, 1); 
memcpy(league,line,len - 1); 
league_p++; 
char *team_p = strchr(league_p,'|'); 
len = team_p - league_p; 
char *team = calloc(len, 1); 
memcpy(team,league_p,len - 1); 

この方法であなたは常に最初の2つの値が、問題は、私はこれらの行の間で情報を読み取る必要があるということです

+0

助けてくれてありがとう –

+1

'2 == sscanf(行、"%s |%s "、...'はスペースが ' | ''行の中で '|' – chux

関連する問題