Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: [Solved]hỏi về struct ( sai chỗ nào đây nhỉ)

  1. #1
    Ngày gia nhập
    07 2008
    Bài viết
    30

    Angry [Solved]hỏi về struct ( sai chỗ nào đây nhỉ)

    đây là code nhập hồ sơ nhân viên
    Code:
    #include<stdio.h>
    #include<conio.h>
    struct hoso
    {
    	char hoten[50];
    	int maso;
    }  nv[10];
    int n=0;
    void nhap();
    void xuat();
    void main()
    {
    	char ch;
    	clrscr();
    	int i=1;
    	while(i==1)
    	{
    		printf("\n Nhap 'n' de nhap va 'x' de xuat");
    		ch=getche();
    		switch(ch)
    		{
    			case 'x' : xuat(); break;
    			case 'n' : nhap(); break;
    			default : printf("\n khong lam gi ca ");
    		}
    		printf("\n+ Ban co muon thuc hien tiep khong?\n Nhap 1 de tiep tuc phim bat ki de ket thuc");
    		scanf("%d",&i);
    	}
    getch();
    
    }
    void nhap()
    {
    	printf("\n Nhap ten nhan vien thu %d",n+1);
    	gets(nv[n].hoten);	printf("\n Nhap ma so nhan vien thu %d",n+1);
    	scanf("%d",&nv[n].maso);
    	n++;
    }
    void xuat()
    {
    	printf("\n+ Ban dang mo danh sach da nhap");
    	for(int k=0;k<n;k++)
    	{
    		printf("\n  ten nhan vien thu %d la : %s",k+1,nv[k].hoten);
    		printf("\n  ma so nhan vien thu %d la : %d",k+1,nv[k].maso);
    	}
    
    }
    đoạn in đậm tại sao mình nhập tên và mã số người thứ nhất rồi...sau đó nhập tiếp người thứ 2..tại sao nó bỏ qua dòng in đậm đó và chỉ thực hiện nhập mã số người thứ 2 mà thôi

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    bị trôi ... vấn đề thường gặp...
    thêm fflush(stdin); vào sau các lệnh scanf
    code ra gió bão

  3. #3
    Ngày gia nhập
    07 2008
    Bài viết
    30

    cám ơn .. cho mình hỏi thêm cái này tại sao hko phải kiểu int thì phải nhập như thế này?
    Code:
    scanf("%f", &tam); hoc vien.diem = tam;
    tại sao phải làm như vậy ..mình có thể nhập trực tiếp đc ko?

    cho mình hỏi thêm cái này nữa
    Code:
     printf("điểm = "); scanf ("%f*c", &tam ); hv[i].diem = tam ;
    *c : để làm gì?

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Không phải *c mà là %*c đó là cách đọc bỏ cách một kí tự tác dụng tương tự fflush(stdin) mục đích là đẩy thằng '\n' trong bộ đệm để không làm trôi các lệnh đọc gets() getch()... phía sau .
    C Code:
    1. scanf("%f", &tam); hv[i].diem = tam;
    Dùng cách này vì chuẩn C cũ không cho phép các giá trị float đọc kiểu này sài với biến thì được chứ lấy địa chỉ mảng float không được trong chuẩn C cũ :
    C Code:
    1. scanf("%f", &hv[i].diem);
    Còn với chuẩn C mới bây giờ cách đọc như trên dùng được không cần dùng cách đọc vào một biến tạm nữa đa số các IDE bây giờ đều dịch theo chuẩn C99 rồi nên dùng như trên vô tư .
    I'm superman

  5. #5
    Ngày gia nhập
    07 2008
    Bài viết
    30

    ừk cám ơn bạn nhìu nha

    thế khi nào thì xài fflush(stdin) ngoài trường hợp như ban nãy...khi nào thì xài %*c để không trôi gets hay getch() phía sau..liệu có phải kiểu cấu trúc mới xài?...cho mình ý kiến nha thanks

    ai cho mình ý kiến với thanks
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 02-12-2008 lúc 08:12 PM.

  6. #6
    Ngày gia nhập
    05 2008
    Bài viết
    14

    Mặc định [Solved]hỏi về struct ( sai chỗ nào đây nhỉ)

    cái lệnh này hình như chỉ dùng sau scanf() lúc đó nó bị trôi nếu lệnh tiếp theo là một lệnh nhập.cái này bạn dùng lệnh while(getchar() != '\n'); cũng được mình dùng linux thấy cái lệnh ffush() không được thì fai.
    giờ say mê bên ai em đổ lỗi anh vô tình

  7. #7
    Ngày gia nhập
    07 2008
    Bài viết
    30

    cho mình hỏi thêm về truyền chuỗi trong struct cho hàm
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    struct chuoi
    {
    	char ten[10];
    } nv;
    void ham(char *hoten);
    void main()
    {
    	printf("\n nhap ten cua nv:");
    	gets(nv.ten);
    	ham(nv.ten);
    	printf("ngoai ham : %s ",nv.ten);
    	getch();
    }
    void ham(char *hoten)
    {
    //	strcat(hoten,"ngoc");
    //	hoten="Linh";
    	printf("\n+Trong ham :%s \n",hoten);
    }
    mình muốn hỏi là : mìn dùng con trỏ hoten kiểu char để trỏ vào chuỗi nv.ten
    có nghĩa là nv.ten sẽ thay đổi nếu hoten thay đổi...khi mình dùng strcat để cộng chữ "ngoc" vào thì khi xuất ra màn hình trong hàm và ngoài hàm là thanhngoc (nếu chuỗi mình nhập vào là "thanh"); nhưng khi mình hko xài cái strcat mà mình chỉ gán cái họten="linh" thì khi xuất ra trong hàm nó ghi "linh" ngoài hàm nó ghi "Thanh" giải thích giùm mình nhé cám ơn
    câu hỏi của mình là tại sao có sự khác nhau đó đáng lẽ hoten thay đổi là chuỗi Linh thì ngoài hàm cũng như vậy chứ?

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    54

    câu này có gì đâu bạn : Trong xâu ko có khái niệm gán 2 xâu với nhau .
    Muốn làm vậy bạn dùng hàm strcpy . còn cái strcat là nối 2 xâu với nhau nên chương trình sẽ đúng
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  9. #9
    Ngày gia nhập
    07 2008
    Bài viết
    30

    ưh cám ơn nhé

Các đề tài tương tự

  1. Bài tập C++ làm sao truy xuất biến của struct lồng trong struct
    Gửi bởi quangnam.tamky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-04-2013, 05:22 PM
  2. [ Solved ]Hỏi về struct
    Gửi bởi pen&pen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 25-11-2008, 12:58 PM
  3. [ Solved ]Chỉ giùm em lỗi sai struct
    Gửi bởi acaica trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 30-10-2008, 04:31 PM
  4. [ Solved ]Giúp em sắp xếp struct sinhvien .
    Gửi bởi chicken_C++ trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 26-10-2008, 02:39 PM
  5. [ Solved ]Thắc mắc nhỏ về khai báo kiểu struct
    Gửi bởi writerashe trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 17-09-2008, 11:29 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn