我需要讀取檔案并將其保存到結構中。
檔案輸入示例:
AAAAA AAAAA 2010 999.00 999.00 999.00
BBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 2012 1001.00 1001.00 1001.00 CCCC
CCCCCCCC 2010 1001.00 1001.00 1001.00 1001.00 1001.00
代碼:
#include <stdio.h>
struct Worker {
char name[20], surname[20];
int year;
double salary[5];
} arr[1000];
int number_of_workers = 0;
void load() {
FILE *input = fopen("input.txt", "r");
int i = 0, j;
while (i < 1000) {
fscanf(input, "%s %s %d\n", arr[i].name, arr[i].surname, arr[i].year);
i ;
for (j = 0; j < 5; j )
fscanf(input, "%d ", arr[i].salary[j]);
if (feof(input))
break;
}
fclose(input);
number_of_workers = i;
}
int main() {
load();
int i, j;
for (i = 0; i < number_of_workers; i ) {
printf("%s %s %d ", arr[i].name, arr[i].surname, arr[i].year);
for (j = 0; j < 5; j )
printf("%.2f ", arr[i].salary[j]);
printf("\n");
}
return 0;
}
我在螢屏上什么都沒有。你能幫我解決這個問題嗎?
uj5u.com熱心網友回復:
這里是固定版本。
&您在閱讀整數和雙打時丟失了。使用 fscanf 您可以檢查讀取的專案數以確定何時到達檔案末尾。每一行都可以在一個 fscanf 呼叫中讀取(如果你想走那條路),不需要雙回圈。
編輯:作為旁注,使用字串時,您必須小心不要溢位緩沖區。您可以添加s以限制讀取的字符。此外,您可以檢查 fopen 的回傳值。
#include <stdio.h>
struct Worker {
char name[20], surname[20];
int year;
double salary[5];
} arr[1000];
int number_of_workers = 0;
void load()
{
FILE *input = fopen("input.txt", "r");
int i = 0;
while ((fscanf(input, "%s %s %d %lf %lf %lf %lf %lf", arr[i].name, arr[i].surname, &arr[i].year, &arr[i].salary[0], &arr[i].salary[1], &arr[i].salary[2], &arr[i].salary[3], &arr[i].salary[4])) == 8 && i < 1000)
{
number_of_workers ;
i ;
}
fclose(input);
}
int main()
{
load();
for (int i = 0; i < number_of_workers; i )
{
printf("%s %s %d %.2f %.2f %.2f %.2f %.2f", arr[i].name, arr[i].surname, arr[i].year, arr[i].salary[0], arr[i].salary[1], arr[i].salary[2], arr[i].salary[3], arr[i].salary[4]);
printf("\n");
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449353.html
