• ベストアンサー

fscanfについて

教えてgooを参考にしましたが、fscanfを使ってテキストファイルの任意の行のデータを読み込みたいのですがうまくいきません。 テキストファイルは 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 1 1 といった感じの2進数で3行以上あります。 下に自分が作ったソースがあります。 どこがいけないのか、どういった手法があるのかを詳しく教えていただけたら幸いです。よろしくお願いします。 int gene[10]; FILE* f=fopen("Gene.txt","r"); while(fscanf(f,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &gene[0],&gene[1],&gene[2],&gene3],&gene     [4],&gene[5],&gene[6],&gene[7],&gene       [8],&gene[9])!=EOF) n++; fclose(f);

質問者が選んだベストアンサー

  • ベストアンサー
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

文字列の解析は昔から、トークン(strtok())を使うのがスマートですよ。 windowsの環境でも有ります。 http://www.microsoft.com/japan/developer/library/vccore/_crt_strtok.2c_.wcstok.2c_._mbstok.htm

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtok.3.html

その他の回答 (2)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

良いやり方ではないと思うが、「どういった手法」ということで参考までに。  int gene[10];  char szLine[25];  char *pBuff;  int i,n = 0;  FILE* fp=fopen("Gene.txt","r");  while(fgets(szLine,24,fp) != NULL) {   pBuff = szLine;   for(i = 0; i < 7; i++) {    gene[i] = strtok(pBuff," \n")[0];    pBuff = NULL;   }   n++;  }  fclose(fp);

回答No.1

ファイルの方は1行に空白文字区切りで7つの数が入っているんですよね? ならばフォーマットの%dの数もそれに合わせないとずれて行きます。それとカンマではなく空白で区切る必要があります(ファイルの方が空白文字で区切られているからです)。 ということで fscanf() の部分はこうです。 fscanf(f, "%d %d %d %d %d %d %d",     &gene[0], &gene[1], &gene[2], &gene[3],     &gene[4], &gene[5], &gene[6])