アプリ版:「スタンプのみでお礼する」機能のリリースについて

2002
Chicago
Adrien Brody
The Pianist
Nicole Kidman
The hours

2001
A Beautiful Mind
Denzel Washington
Training Day
Halle Berry
Monster's Ball

2000
Gladiator
Russell Crowe
Gladiator
Julia Roberts
Erin Brockovich



fopenでこのようなファイルのデータを取り込み、
構造体に格納したいのですが
どうすればいいのでしょう・・・

A 回答 (2件)

構造体をどう設計しているか不明なので適切な答えができませんね。

。。
とりあえず、適当なサンプルです。(データを入れたファイルのファイル名はdata.txt)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define NAME_SIZE 40
#define DATA_SIZE 100
struct academy {
 int year;
 char picture[NAME_SIZE];
 char actor[NAME_SIZE];
 char actor_cast[NAME_SIZE];
 char actress[NAME_SIZE];
 char actress_cast[NAME_SIZE];
} data[DATA_SIZE];

int main(void) {
 char buf[100];
 int cnt,i;
 FILE *fp;
 if ((fp=fopen("data.txt","r"))==NULL) {
  printf("file open error\n");
  return -1;
 }
 for (cnt=0; cnt<DATA_SIZE; cnt++) {
  do {
   if (fgets(buf,sizeof buf,fp)==NULL) goto INPUT_SKIP; /* 1行読む。ファイル終端なら二重ループから出る */
  } while(isdigit(buf[0])==0); /* 先頭文字が数字以外なら次の行 */
  sscanf(buf,"%d",&data[cnt].year);
  if (fgets(buf,sizeof buf,fp)==NULL) break;
  strncpy(data[cnt].picture,strtok(buf,"\n"),NAME_SIZE-1);
  if (fgets(buf,sizeof buf,fp)==NULL) break;
  strncpy(data[cnt].actor,strtok(buf,"\n"),NAME_SIZE-1);
  if (fgets(buf,sizeof buf,fp)==NULL) break;
  strncpy(data[cnt].actor_cast,strtok(buf,"\n"),NAME_SIZE-1);
  if (fgets(buf,sizeof buf,fp)==NULL) break;
  strncpy(data[cnt].actress,strtok(buf,"\n"),NAME_SIZE-1);
  if (fgets(buf,sizeof buf,fp)==NULL) break;
  strncpy(data[cnt].actress_cast,strtok(buf,"\n"),NAME_SIZE-1);
 }
INPUT_SKIP:
 printf("%d件読み込みました\n",cnt);
 for(i=0; i<cnt; i++) {
  printf("%d\n[%s]\n[%s]\n[%s]\n[%s]\n[%s]\n\n",
   data[i].year,data[i].picture,data[i].actor,data[i].actor_cast,data[i].actress,data[i].actress_cast);
 }
 fclose(fp);
 return 0;
}
    • good
    • 0

>どうすればいいのでしょう・・・


と言われても・・・
というのが多くの人の感想です。
まずは何がわからないのか整理してください。

質問をする前に、わからなくてもいいので自分の思った通りにプログラムを書いてみましょう。
その上でコンパイルが通らなかったり、プログラムを実行して期待通りの動きをしなかったら質問しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!