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

Đề tài: Các bác xem hàm gets giúp em

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Red face Các bác xem hàm gets giúp em

    Code:
    #include <stdio.h>
    #include<conio.h>
    #include <string.h>
    struct HOCSINH
    {
    	char hoten[30];
    	float diemTH,diemLT,diemTK;
    };
    struct NODE
    {
    	HOCSINH hs;
    	NODE *pNext;
    };
    NODE* CreateNode(HOCSINH hs);
    bool AddTail(NODE *&pTail,NODE *&pHead,HOCSINH hoso);
    void Xuat(NODE *pHead);
    void Remove(NODE *&pHead,NODE *&pTail);
    void main()
    {
    	NODE *pHead=NULL;
    	NODE *pTail=pHead;
    	int kt=0;
    	HOCSINH hoso;
    	char hoten[30];
    	printf("Nhap thong tin hoc sinh, nhan -1 de ket thuc\n");
    	scanf("%d",&kt);
    	while(kt!=-1)
    	{
    		printf("Ho ten: ");
    		gets(hoso.hoten);
    
    		do
    		{
    			printf("Diem Thuc hanh =");
    			scanf("%f",&hoso.diemTH);
    			if((hoso.diemTH <0)||(hoso.diemTH>10))
    				printf("diem so ban nhap khong nam trong khoang 0 va 10\n");
    		}
    		while((hoso.diemTH<0)||(hoso.diemTH>10));
    		
    		do
    		{
    			printf("Diem Ly thuyet =");
    			scanf("%f",&hoso.diemLT);
    			if((hoso.diemLT <0)||(hoso.diemLT>10))
    				printf("diem so ban nhap khong nam trong khoang 0 va 10\n");
    		}
    		while((hoso.diemLT<0)||(hoso.diemLT>10));
    		
    		hoso.diemTK=((hoso.diemTH*4)+(hoso.diemLT*6))/10;
    		
    		AddTail(pTail,pHead,hoso);
    		printf("nhap -1 de ket thuc");
    		scanf("%d",&kt);
    	}
    	Xuat(pHead);
    	Remove(pHead,pTail);
    	getch();
    }
    NODE* CreateNode(HOCSINH hoso)
    {
    	NODE *pNode;
    	pNode= new NODE;
    	if (pNode==NULL)
    		return NULL;
    	strcpy(pNode->hs.hoten,hoso.hoten);
    	pNode->hs.diemTH=hoso.diemTH;
    	pNode->hs.diemLT=hoso.diemLT;
    	pNode->hs.diemTK=hoso.diemTK;
    	pNode->pNext=NULL;
    	return pNode;
    }
    bool AddTail(NODE * &pTail,NODE *&pHead,HOCSINH hoso)
    {
    	NODE *pNode=CreateNode(hoso);
    	if (pNode==NULL)
    		return false;
    	if(pTail==NULL)
    	{
    		pTail=pHead=pNode;
    	}
    	else
    	{
    		pTail->pNext=pNode;
    	}
    	return true;
    }
    
    void Xuat(NODE *pHead)
    {
    	NODE *pNode;
    	pNode = new NODE;
    	pNode=pHead;
    	while(pNode->pNext!=NULL)
    	{
    		printf("Ho ten: ");
    		puts(pNode->hs.hoten);
    		printf("Diem Thuc hanh =%f",pNode->hs.diemTH);
    		printf("Diem Ly thuyet =%f",pNode->hs.diemLT);
    		printf("Diem Tong ket  =%f",pNode->hs.diemTK);
    	}
    }
    void Remove(NODE *&pHead,NODE *&pTail)
    {
    	NODE *pNode;
    	pNode= new NODE;
    	while(pHead->pNext!=NULL)
    	{
    		pNode=pHead;
    		pHead=pHead->pNext;
    		delete pNode;
    	}
    	pTail=pHead=NULL;
    }
    Số là thế này, các bác xem giúp em ngay chỗ hàm gets() nằm trong vòng lặp while trong void main. Lúc em chạy thì nó ko thực hiện hàm gets được, nó nhảy ngay sang nhập diem thuc hanh. Em ko bik phải xử lý như thế nào, rất cám ơn
    PS/ đây là tấm hình thực tế
    Attached Thumbnails Attached Thumbnails Loi.png  

  2. #2
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    trước khi gets() bạn phải xóa bộ đệm bằng cin.ignore()
    I'll come back

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    15

    Chia tay chia tay chiều mưa miên man
    Bong bóng phập phồng lòng ai chứa chan
    Đừng khóc nhé mưa ơi nhạt nhòa lắm
    Chiều phân vân...Cầu vồng xa xăm

  4. #4
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Khi sử dụng gets mà trước gets có kí tự \n trong bộ nhớ đệm thì ta cần làm sạch nó
    <Thường thì khi dùng scanf>
    dùng hàm fflush (stdin); trước khi sử dụng gets. còn cin.ignore (1); là dùng trong C++
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Ôi cám ơn các bác rất nhiều, em đã ngộ ra rồi. .

  6. #6
    Ngày gia nhập
    01 2011
    Nơi ở
    \WINDOWS\Assembly\
    Bài viết
    54

    Mặc định Các bác xem hàm gets giúp em

    C Code:
    1. #include <stdio.h>
    2. #include<conio.h>
    3. #include <string.h>
    4. struct HOCSINH
    5. {
    6.     char hoten[30];
    7.     float diemTH,diemLT,diemTK;
    8. };
    9. struct NODE
    10. {
    11.     HOCSINH hs;
    12.     NODE *pNext;
    13. };
    14. NODE* CreateNode(HOCSINH hs);
    15. bool AddTail(NODE *&pTail,NODE *&pHead,HOCSINH hoso);
    16. void Xuat(NODE *pHead);
    17. void Remove(NODE *&pHead,NODE *&pTail);
    18. void main()
    19. {
    20.     NODE *pHead=NULL;
    21.     NODE *pTail=pHead;
    22.     int kt=0;
    23.     HOCSINH hoso;
    24.     char hoten[30];
    25.     printf("Nhap thong tin hoc sinh, nhan -1 de ket thuc\n");
    26.     scanf("%d",&kt);
    27.     while(kt!=-1)
    28.     {
    29.         printf("Ho ten: ");
    30.         fflush (stdin); // TẠI ĐÂY THÊM VÀO
    31.                             gets(hoso.hoten);
    32.  // ĐỂ NÓ DỌN DẸP LUỒNG NHẬP CHUẨN
    33. ... v.v ...

    thực chất khi hàm scanf lấy giá trị và gán cho biến kt thì nó chỉ lấy phần số còn ký tự bị bỏ qua nên bạn phải dọn dẹp để hàm gets có thể hoạt động.
    Đã được chỉnh sửa lần cuối bởi taller : 13-09-2011 lúc 05:17 PM.

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 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