Tại sao chương trình của em ra kết quả lúc đúng lúc sai

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef struct{
	char manv[8], hoten[20],trinhdo[2],trinhdo1[10],giadinh[1],giadinh1[10];
	int con;
	int luongcanban;
}lylich;
typedef struct{
	int nghicophep,nghikhongphep,lamthem,luongthuc,phutroi;
	char kqua[2],kqua1[5];
}chamcong;
void nhaplylich(lylich ds[], chamcong ds1[],int n,float phutroi){
	char a[3]="C1",b[3]="C2",c[3]="C3",d[3]="DH",e[3]="CH",f[2]="S",g[2]="M";
	for(int i=0;i<n;i++){
	printf("====NHAP THONG TIN NHAN VIEN %d======\n",i+1); fflush(stdin);
	ds[i].luongcanban=1000000;
	printf("Nhap ma nhan vien: ");
	gets(ds[i].manv);
	printf("\n Nhap ho ten nhan vien: ");
	gets(ds[i].hoten);
	 int key=0;
	while(key!=1){
		printf("\n Nhap trinh do van hoa: ");
		gets(ds[i].trinhdo);
	if(strcmp(ds[i].trinhdo,a)==0){
		strcpy(ds[i].trinhdo1,"Cap 1");
		key=1;
	}
	if(strcmp(ds[i].trinhdo,b)==0){
		strcpy(ds[i].trinhdo1,"Cap 2");
		key=1;
	}
	if(strcmp(ds[i].trinhdo,c)==0){
		strcpy(ds[i].trinhdo1,"Cap 3");
		key=1;
	}
	if(strcmp(ds[i].trinhdo,d)==0){
		strcpy(ds[i].trinhdo1,"Dai Hoc");
		key=1;
	}
	if(strcmp(ds[i].trinhdo,e)==0){
		strcpy(ds[i].trinhdo1,"Cao Hoc");
		key=1;
		ds1[i].phutroi=0.1*ds[i].luongcanban;
	}
	if(key!=1)
		printf("\n Khong hop le! Nhap lai");
		} key=0;
	printf("\n Nhap so con: ");
	scanf("%d",&ds[i].con); fflush(stdin);
	if(ds[i].con>2)
		ds1[i].phutroi=0.05*ds[i].luongcanban+ds1[i].phutroi;
	while(key!=1)
	{
		printf("\n Tinh trang gia dinh: ");
		gets(ds[i].giadinh);
		if(strcmp(ds[i].giadinh,f)==0){
			strcpy(ds[i].giadinh1,"Single");
			key=1;}
		if(strcmp(ds[i].giadinh,g)==0){
			strcpy(ds[i].giadinh1,"Married");
			key=1;}
	}
	printf("\n phutroi: %d ",ds1[i].phutroi);
}
}
void nhapchamcong(chamcong ds1[], lylich ds[],int n,float phutroi){
	char j[3]="TB", h[3]="T", k[3]="K";
	int key;
	
	for(int i=0;i<n;i++){
	printf("\n -----Nhap bang cham cong nhan vien %d-----",i+1);
	printf("\n Phu troi %d",ds1[i].phutroi);
	do{
		printf("\nNhap so ngay nghi co phep: ");
		scanf("%d",&ds1[i].nghicophep);
		if(ds1[i].nghicophep<0 or ds1[i].nghicophep>28)
			printf("\n Khong hop le! Hay nhap so ngay >=0 va <=28");
		}while(ds1[i].nghicophep<0 or ds1[i].nghicophep>28);
	do{
		printf("\nNhap so ngay nghi khong phep: ");
		scanf("%d",&ds1[i].nghikhongphep);
		ds1[i].phutroi=ds1[i].phutroi-((ds1[i].nghikhongphep*0.05)*1000000); printf("\n Phutroi: %d",ds1[i].phutroi);
		if(ds1[i].nghikhongphep<0 or ds1[i].nghikhongphep>28)
			printf("\n Khong hop le! Hay nhap so ngay >=0 va <=28");
		}while(ds1[i].nghikhongphep<0 or ds1[i].nghikhongphep>28);
	do{
		printf("\nNhap so ngay lam them: ");
		scanf("%d",&ds1[i].lamthem);
		if(ds1[i].lamthem>0)
			ds1[i].phutroi=ds1[i].lamthem*0.04*ds[i].luongcanban+ds1[i].phutroi;
		if(ds1[i].lamthem<0 or ds1[i].lamthem>28)
			printf("\n Khong hop le! Hay nhap so ngay >=0 va <=28");
		}while(ds1[i].lamthem<0 or ds1[i].lamthem>28);
		fflush(stdin);
	do{
	printf("\n Nhap ket qua cong viec: ");
	gets(ds1[i].kqua); key=0;
	if(strcmp(ds1[i].kqua,h)==0){
		strcpy(ds1[i].kqua1,"Tot");
		key=1;}
	if(strcmp(ds1[i].kqua,k)==0){
		strcpy(ds1[i].kqua1,"Kem");
		key=1;}
	if(strcmp(ds1[i].kqua,j)==0){
		strcpy(ds1[i].kqua1,"Kha");
		key=1;}
	if(key!=1)
		printf("\n Khong hop le! Hay nhap 'T' hoac 'TB'  hoac 'k' ");
	}while(key!=1);
	ds1[i].luongthuc=1000000+ds1[i].phutroi;
	printf("\n Phutroi: %d",ds1[i].phutroi);

}
}
void xuatlylich(lylich ds[],int n){
	for(int i=0;i<n;i++)
	{
		printf("\n ~~~~~~~Thong tin ly lich nhan vien %d~~~~~~",i+1);
		printf("\n Ma nhan vien: %s",ds[i].manv);
		printf("\n Ho ten nhan vien: %s",ds[i].hoten);
		printf("\n Tinh trang gia dinh: %s",ds[i].giadinh1);
		printf("\n So con: %d",ds[i].con);
		printf("\n Trinh do hoc van: %s",ds[i].trinhdo1);
		printf("\n Luong can ban: %d",ds[i].luongcanban);
	}
}
void xuatchamcong(chamcong ds1[],int n){
	for(int i=0;i<n;i++){
		printf("\n So ngay nghi co phep: %d",ds1[i].nghicophep);
		printf("\n So ngay nghi khong phep: %d",ds1[i].nghikhongphep);
		printf("\n So ngay lam them: %d",ds1[i].lamthem);
		printf("\n Ket qua cong viec: %s",ds1[i].kqua1);
		printf("\n Luong thuc duoc nhan: %d",ds1[i].luongthuc);
	}
}
main(){
	int n,phutroi=0;
	lylich ds[50];
	chamcong ds1[50];
	printf("\n Nhap so nv: ");
	scanf("%d",&n);
	nhaplylich(ds,ds1,n,phutroi);
	nhapchamcong(ds1,ds,n,phutroi);
	xuatlylich(ds,n);
	xuatchamcong(ds1,n);
}

Đây là code của em,giúp em sủa lỗi với ạ.
Khi em nhập vào: Trình độ học vấn là CH, Số con là số lớn hơn 2, số ngày nghỉ không phép là 2 thì phần tính phụ trội bị thiếu mất một đơn vị.
Còn khi nhập vào số ngày nghỉ phép khác thì nó vẫn ra kết quả đúng bình thường. Mọi người xem giúp em một chút với ạ


đây là khi nhập số ngày nghỉ không phép = 2


Khi nhập bằng 1

Ra kết quả khong dung

Đề nghị thớt thay compiler khác. https://repl.it/repls/OpulentPresentNumericalanalysis

tương tự In ra số Armstrong. Em không biết tại sao nó vẫn in ra số 75

4 Likes

là như nào ạ, em mới học nên không hiểu lắm

Em không hiểu lắm, nghĩa là dùng kiểu float nó tính toán sai hay sao ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?