私の課題は、txtファイルから入力を取得し、それを構造体配列の一部に読み取ってから操作することですが、ファイルからの読み取りに問題があります。
私の構造は次のとおりです。
typedef struct Employee
{
char first[7], initial, last[9], street[16], city[11], state[2], zip[5];
int age;
char sex;
int tenure;
float salary;
} Employee;
そしてメイン内:MAXを100に定義しました
FILE *payfile;
Employee worker[MAX];
int i = 0, num;
float average;
payfile = fopen("payfile.txt","r");
while(!feof(payfile))
{
fscanf(payfile,"%s %c %s %s %s %s %s %d %c %d %f",
worker[i].first,&worker[i].initial,worker[i].last,worker[i].street,
worker[i].city,worker[i].state,worker[i].zip,&worker[i].age,&worker[i].sex,
&worker[i].tenure,&worker[i].salary);
i++;
}
読み取る txt ファイルは次のとおりです。
ADA A AGUSTA 33 BABBAGE ROAD LOVELACE GB 19569 28 F 2 350.50
ISSAC A ASIMOV 99 FICTION WAY AMHERST MA 63948 58 M 6 423.88
HUMPHRY R BOGART 71 SAM STREET HOLLYWOOD CA 48482 56 M 5 366.00
ALBERT G EINSTEIN 94 ENERGY WAY PRINCETON NJ 47474 67 M 8 780.00
EMMYLOU L HARRIS 66 COUNTRY ROAD NASHVILLE TN 72647 38 F 2 767.42
JAMES T KIRK 11 SPACE STREET VULCAN CA 82828 46 M 1 235.70
TED L KOPPEL 55 ABC PLACE WASHINGTON DC 37376 48 M 9 909.44
DAVID T LETTERMAN 14 WNBC AVENUE NEW YORK NY 19338 47 M 5 445.65
STEVIE R NICKS 31 MUSIC ROAD CHICAGO IL 23459 38 F 8 460.88
MONTY P PYTHON 76 SILLY STREET LONDON GB 80939 44 M 2 320.50
ROGER R RABBIT 15 LOONEY TOONS HOLLYWOOD CA 91343 24 M 4 259.53
SALLY W RIDE 21 COLUMBIA WAY HOUSTON TX 91123 30 F 9 707.80
ROD Q SERLING 11 TWLIGHT ZONE SAN DIEGO CA 93939 56 M 1 440.00
LUKE R SKYWALKER 43 MILKY WAY NEW YORK NY 12343 35 M 5 660.00
そのため、fscanf の精度に問題があります。ワーカーに含まれているものを確認するには、printf("%s",worker[0].first) と printf("%c",worker[0].initial) などを使用しています。
最初の行の最初の文字列をスキャンすると、ADA が取得され、次に空白をスキャンして次の文字 A が取得されます。ここまでは良好です。次に、空白をスキャンして次の文字列を取得すると、AGUSTA が返されます。しかし今、私はこの問題に遭遇しました。33 BABBAGE ROAD を worker[0].street に取得する必要がありますが、パラメーター「%s」を「%16c」に変更してもうまくいきません。代わりに、都市の一部が含まれます。
私は何を間違っていますか?それぞれのコード行を正しい精度でスキャンするには何を変更すればよいですか?
ありがとう。