30/09/2018, 21:38

Mảng Struct trong C

Mình có bài lập trình về Struct trong C. Có thắc mắc về phần hiển thị mảng Struct. Debug ko báo lỗi. Mà khi mình thực hiện 2 lệnh in mảng Struct thì chỉ được 1, đến lệnh hiển thị tiếp theo thì ko hiển thị mà báo lỗi ko chạy tiếp. Mong mọi người chỉ giúp. Thanks all!!!

#include"conio.h"
#include"stdio.h"
struct NhanVien
{
	char HoTen[100];
	int NamSinh;
	float HSL;
};
void InNV(struct NhanVien a[], int n) 
{
printf("%-20s %10s %15s %-10s
", "Ho ten", "Nam sinh", "He so luong");
	for (int i = 1; i <= n; i++) 
	{
		printf("%-20s %10d %15.2f
", a[i].HoTen, a[i].NamSinh, a[i].HSL);
		
  	} 
}
int main()
{
	struct NhanVien a[100];
	int n, i;
	// Nhap n nhan vien
	printf("Nhap so luong nhan vien: "); scanf("%d", &n);
	while (n <= 1 )
	{
		printf("Nhap lai so luong nhan vien > 1: "); scanf("%d", &n);
	}
	
	for (i = 1; i <= n; i++) 
	{
		#define nv a[i]
        printf("Nhap du lieu cho sinh vien thu %d:
", i);
        printf("Ho ten: "); 
       // gets(nv.HoTen);
        scanf("%s", &nv.HoTen);
        fflush(stdin);
        printf("Nam sinh: "); 
        scanf("%d", &nv.NamSinh);
        printf("He so luong: "); 
        scanf("%f", &nv.HSL);
    }   
    

// Hien thi danh sach nhan vien co HSL duoi 3.67
	printf("------Danh sach nhan vien co he so luong duoi 3.67: 
");
	printf("%-20s %10s %15s %-10s
", "Ho ten", "Nam sinh", "He so luong");
	for (i = 1; i <= n; i++) 
	{
		#define nv a[i]
	 	if (nv.HSL < 3.67)
	 		printf("%-20s %10d %15.2f
", nv.HoTen, nv.NamSinh, nv.HSL);
		
  	}  
  	
  	
// Thay doi thong tin nhan vien thu k
	
	int k;
	struct NhanVien s;
	printf("Nhap thu tu nhan vien can chinh sua thong tin (tu 1 den %d): ",n);
	scanf("%d", &k);
	while (k <= 0|| k > n)
	{
		printf("Nhap lai thu tu nhan vien can chinh sua thong tin: ");
		scanf("%d", &k);
	}
	printf("Nhap thong tin moi cho nhan vien thu %d: 
", k);
		fflush(stdin);
        printf("Ho ten: "); 
        //gets(nvs.HoTen);
        scanf("%s", &s.HoTen);
        fflush(stdin);
        printf("Nam sinh: "); 
        scanf("%d", &s.NamSinh);
        printf("He so luong: "); 
        scanf("%f", &s.HSL);
 	
	 a[k] = s;
	 
// Sap xep danh sach nhan vien theo nam sinh tang dan va hien thi	

fflush(stdin);
	struct NhanVien tg;
 	for(i = 1; i < n; i ++)
 		for(int j = i+1; j <= n; j ++)
 		{
 			if(a[i].NamSinh > a[j].NamSinh)
 			{
 				tg = a[i];
 				a[i] = a[j];
 				a[j] = tg;
 			}
		 } 
	 
	 printf("Danh sach da sap xep la:
");
	 
	InNV(a,n);
	  
	getch();
	return 0;
}
viết 23:48 ngày 30/09/2018

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null stateme…

Bạn xem lại các vòng lặp for, mảng trong C bắt đầu từ 0 chứ không phải 1

Hoa Hồng viết 23:46 ngày 30/09/2018

Mình biết nhưng mình muốn dùng từ phẩn tử 1 để tiện cho việc đánh số phần tử: Ví dụ: a[1] trữ thông tin nhân viên số 1.

Người bí ẩn viết 23:46 ngày 30/09/2018

Mình biết nhưng mình muốn dùng từ phẩn tử 1 để tiện cho việc đánh số phần tử

Làm gì có vụ này ? Quy ước của nó là start từ 0 mà bạn lại gán 1 thì phần tử cuối ở đâu ? Chẳng lẽ bằng số lượng phần tử luôn ?

Hoa Hồng viết 23:49 ngày 30/09/2018

Bạn chỉ cẩn khai báo số phần tử cộng thêm 1 là ok. Ví dụ bạn sử dụng 50 phần tử thì bạn khai báo: int a[51]

Người bí ẩn viết 23:55 ngày 30/09/2018

Thế cũng không tiện lắm đâu và cũng không tốt chút nào !
Bạn khai báo a[0] rồi +1 cho nó cũng được mà

Trần Ngọc Khoa viết 23:45 ngày 30/09/2018

printf("%-20s %10s %15s %-10s\n", "Ho ten", "Nam sinh", "He so luong");
chỗ này bạn điền thiếu một đối số nè.

Hoa Hồng viết 23:51 ngày 30/09/2018

thanks bạn nhé. Lỗi đơn giản vậy mà mình ko soi ra. Cứ nghĩ sai ở cú pháp hay struct.

Hoa Hồng viết 23:45 ngày 30/09/2018

Mình mới tham gia nhóm nên chưa biết. Thanks bạn nha.

Manh Pham viết 23:54 ngày 30/09/2018

anh có thể giải thích rõ hơn về việc sử dụng %-20s không ạ, bình thường thì em dùng %4d nghĩa là nó sẽ giành 4 khoảng trống để viết số đó, vậy %-20s thì dấu “trừ” có ý nghĩa gì vậy ạ? ^^

Trần Ngọc Khoa viết 23:53 ngày 30/09/2018

anh có thể giải thích rõ hơn về việc sử dụng %-20s không ạ, bình thường thì em dùng %4d nghĩa là nó sẽ giành 4 khoảng trống để viết số đó, vậy %-20s thì dấu “trừ” có ý nghĩa gì vậy ạ? ^^

Nó sẽ canh bên phải hoặc bên trái đó bạn.

Trần Ngọc Khoa viết 23:51 ngày 30/09/2018

Nếu được thì bạn nhấn dấu tích đã được trả lời giùm mình nhé. Trả lời bao lâu nay mà chưa được nhân dấu tick lần nào

Hoa Hồng viết 23:46 ngày 30/09/2018

Hi, mình mới tham gia nên ko biết! thanks bạn lần nữa nhé. Mong sẽ được học hỏi nhiều từ mọi người trong diễn đàn.

Trần Ngọc Khoa viết 23:53 ngày 30/09/2018

Cảm ơn bạn nhiều

Bài liên quan
0