mình có đoạn code dùng để thêm vào một công nhân, duyệt và in ra danh sách các công nhân ra màn hình, chạy thì không có lỗi nhưng lúc dùng duyet() thì nó lại in ra lung tung.
typedef struct {
char mscn[6], name[20], team[20];
int num_work_day;
float salary_each_day, monney;
}Worker;
void add(void) {
Worker worker;
FILE* file = fopen("file.txt", "r+b");
if(file) {
char mscn[6];
printf("mscn : ");
fgets(mscn, sizeof(mscn), stdin);
fflush(stdin);
rewind(file);
while(fread(&worker, sizeof(Worker), 1, file)) {
if(strcmp(mscn, worker.mscn) == 0) {
printf("mscn bi trung");
return;
}
}
strcpy(worker.mscn, mscn);
printf("name : ");
fgets(worker.name, sizeof(worker.name), stdin);
fflush(stdin);
printf("team : ");
fgets(worker.team, sizeof(worker.name), stdin);
fflush(stdin);
printf("num workdays : ");
scanf("%d", &worker.num_work_day);
fflush(stdin);
printf("day's salary : ");
scanf("%f", &worker.salary_each_day);
fflush(stdin);
worker.monney = tinh_luong(worker.num_work_day, worker.salary_each_day);
fseek(file, 0, SEEK_END);
fwrite(&worker, sizeof(Worker), 1, file);
fclose(file);
} else
printf("_______ERORR______");
}
void duyet(void) {
Worker worker;
FILE* file = fopen("file.txt", "rb");
if(!file)
printf("__ERORR__");
else {
rewind(file);
printf("%-6s %-20s %-10s %4s %13s %13s\n", "macn", "name", "team", "num workdays", "day's salary", "money");
while(fread(&worker, sizeof(Worker), 1, file))
printf("%-6s %-20s %-10s %4d %13.0f %13.0f\n", worker.mscn, worker.name, worker.team, worker.num_work_day,
worker.salary_each_day, worker.monney);
fclose(file);
}
}
nhưng nếu mình thay fgets(string, sizeof(string), stdin); bằng gets(string); ở hàm add thì nó lại chạy bình thường, mình không hiểu được sao nó lại thế, có ai giải thích giúp với
void add(void) {
Worker worker;
FILE* file = fopen("file.dat", "r+b");
if(file) {
char mscn[6];
printf("mscn : ");
//fgets(mscn, sizeof(mscn), stdin);
gets(mscn);
fflush(stdin);
rewind(file);
while(fread(&worker, sizeof(Worker), 1, file)) {
if(strcmp(mscn, worker.mscn) == 0) {
printf("mscn bi trung");
return;
}
}
strcpy(worker.mscn, mscn);
printf("name : ");
//fgets(worker.name, sizeof(worker.name), stdin);
gets(worker.name);
fflush(stdin);
printf("team : ");
//fgets(worker.team, sizeof(worker.name), stdin);
gets(worker.team);
fflush(stdin);
printf("num workdays : ");
scanf("%d", &worker.num_work_day);
fflush(stdin);
printf("day's salary : ");
scanf("%f", &worker.salary_each_day);
fflush(stdin);
worker.monney = tinh_luong(worker.num_work_day, worker.salary_each_day);
fseek(file, 0, SEEK_END);
fwrite(&worker, sizeof(Worker), 1, file);
fclose(file);
} else
printf("_______ERORR______");
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?