• 締切済み

c言語の初心者なんですけど、ファイルからの読み込みで、文字や,や数字を

c言語の初心者なんですけど、ファイルからの読み込みで、文字や,や数字を読み込みたいんですけど できません。 おしえてください。 プログラムは・・・・ #include<stdio.h> #include<ctype.h> int main(void){ char x[500][4]; FILE *fp; int i,j; fp=fopen("data2.txt","r"); for(i=0;i<500;i++){ for(j=0;j<4;j++){ fscanf(fp,"%c",&x[i][j]); } printf("%c,%d,%d,%d\n",x[i][0],x[i][1],x[i][2],x[i][3]); } fclose(fp); } ファイルは 田中,5,abc,18 鈴木,89,57,21 佐藤,,8,69 高橋,95,9,7

みんなの回答

  • sygh
  • ベストアンサー率76% (42/55)
回答No.2

VC++ 2010でテストしています。 VCのコードエディタに張り付けてCtrl+A, Ctrl+K, Ctrl+Fするときれいにインデントされます。 あと質問するときは使用している処理系ぐらい書いたほうが良いです。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <string.h> enum { MAX_NAME = 32, MAX_RECORDS = 500, MAX_LINE_BUF = 512, }; typedef struct Record { char Name[MAX_NAME]; int Scores[3]; } Record; int main(void) { FILE* fp = fopen("data2.txt", "r"); if (fp) { Record dataArray[MAX_RECORDS] = {0}; int i = 0, j = 0; int recordCount = 0; int ret = 0; char lineBuf[MAX_LINE_BUF] = {0}; char nameFormat[64] = {0}; sprintf(nameFormat, "%%%ds", MAX_NAME - 1); for (i = 0; i < MAX_RECORDS; i++) { char* pPrev = lineBuf; char* pNext = lineBuf; if (fgets(lineBuf, MAX_LINE_BUF - 1, fp) == NULL) { break; } pNext = strpbrk(pPrev, ",\n"); if (pNext != NULL) { *pNext = '\0'; pNext++; } ret = sscanf(pPrev, nameFormat, dataArray[i].Name); if (ret != 1) { fprintf(stderr, "ErrorA: Line[%d], Name\n", i); } for (j = 0; j < 3; j++) { pPrev = pNext; if (pPrev == NULL) { fprintf(stderr, "ErrorB: Line[%d], Score[%d]\n", i, j); continue; } pNext = strpbrk(pPrev, ",\n"); if (pNext != NULL) { *pNext = '\0'; pNext++; } ret = sscanf(pPrev, "%d", &dataArray[i].Scores[j]); if (ret != 1) { fprintf(stderr, "ErrorC: Line[%d], Score[%d]\n", i, j); continue; } } recordCount++; } fclose(fp); for (i = 0; i < recordCount; i++) { /* 無効な数値は強制的にゼロとなります。*/ printf("[%d]: %s, %3d, %3d, %3d\n", i, dataArray[i].Name, dataArray[i].Scores[0], dataArray[i].Scores[1], dataArray[i].Scores[2]); } } puts("Press any key to exit..."); _getch(); return 0; }

noname#119957
noname#119957
回答No.1

fscanf()関数の使い方はこちらのサイトにありますよ。 http://www.geocities.jp/ky_webid/c/036ans.html fscanの%cは1バイト文字の読み込みで4バイト読んでも・・・

関連するQ&A