- ベストアンサー
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);
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
文字列の解析は昔から、トークン(strtok())を使うのがスマートですよ。 windowsの環境でも有ります。 http://www.microsoft.com/japan/developer/library/vccore/_crt_strtok.2c_.wcstok.2c_._mbstok.htm
その他の回答 (2)
- Trick--o--
- ベストアンサー率20% (413/2034)
良いやり方ではないと思うが、「どういった手法」ということで参考までに。 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);
- noboru2000
- ベストアンサー率33% (47/140)
ファイルの方は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])