- 締切済み
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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sygh
- ベストアンサー率76% (42/55)
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; }
fscanf()関数の使い方はこちらのサイトにありますよ。 http://www.geocities.jp/ky_webid/c/036ans.html fscanの%cは1バイト文字の読み込みで4バイト読んでも・・・