テキストファイルを読み込むものを作っているのですが…。
テキストに
田中 40 男
木村 28 男
中村 32 女
とある場合、名前の後から読み込んだり途中から
読み込むことってできますか??

#include <stdio.h> #include <stdlib.h> #include <memory.h> // memset に必要 #define MAX 20 #define ITEM 5 struct meibo{ unsigned char name[20]; unsigned long age; unsigned char sex[5]; }; void main(void){ FILE *fp; // char Filename[20]; char str[MAX]; unsigned long i, a, j = 0; char age[20]; struct meibo list[ITEM]; memset( list, 0, sizeof(list) ); // 内容をゼロでクリアしておく // ファイルをオープン(きめうち) fp = fopen( "test.txt", "rt" ); while(fgets(str, MAX, fp) != NULL){ for(i = 0; str != ' '; i++){ list[j].name = str; } list[j].name = '\0'; memset( age, 0, sizeof(age) ); // age をゼロでクリア for(i = i+1,a=0; str != ' '; i++,a++){ // インデックスがおかしい // for(i = i+1; str = ' '; i++){ age[a] = str; // list[j].age = atoi(str); } age[a] = '\0'; list[j].age = atoi(age); // 文字列をatoi // list[j].age = '\0'; for(i = i+1,a=0; str != '\0'; i++,a++){ // for(i = i+1; str[i] != '\0'; i++){ list[j].sex[a] = str[i]; // list[j].sex[a] 配列がおかしい // list[j].sex[i] = str[i]; } list[j].sex[i] = '\0'; j++; } for(i = 0; i < j; i++){ printf("%s %lu %s", list[i].name, list[i].age, list[i].sex); // \n はしょり // printf("%s %lu %s\n", list[i].name, list[i].age, list[i].sex); } fclose(fp); }
while(fgets(str, MAX, fp) != NULL){ sscanf(str,"%s %lu %s",list[j].name,&list[j].age,list[j].sex); j++; }これだけで済みます。