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

Đề tài: check dùm mình hàm demsach với

  1. #1
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Mặc định check dùm mình hàm demsach với

    ko hiểu code phần demsach của mình sai chỗ nào mà sau khi chạy xog ctrinh nó lại đơ đây là code của mình nhờ mọi người check dùm
    Code:
    #include "stdio.h"
    #include "conio.h"
    #include "alloc.h"
    #include "string.h"
    #include "stdlib.h"
    
    struct thongtin
    	{
    		char ten[30];
    		int ma;
    		float gia;
    
    	};
    struct shop
    	{
    		struct thongtin infor;
    		shop *next;
    	};
    struct ds
    	{
    		shop *head;
    		shop *tail;
    	};
    
    ds q;
    void nhapds(shop *p);
    void inds(shop *p);
    int demsach(shop *p,char tim[]);
    
    
    
    void nhapds(shop *p)
    	{
    		char ten[30];
    		int ma;
    		float gia;
    		while(1)
    			{
    				printf("Nhap vao ten sach: ");
    				gets(ten);
    				if(ten[0]==0) break;
    				if(q.head==NULL)
    					{
    						q.head=(shop*)malloc(sizeof(shop));
    						q.head=p;
    					}
    				else
    					{
    						p->next=(shop*)malloc(sizeof(shop));
    						p=p->next;
    					}
    				strcpy(p->infor.ten,ten);
    				printf("Nhap vao ma cua quyen sach: ");
    				scanf("%d%*c",&ma);
    				p->infor.ma=ma;
    				printf("Nhap vao gia quyen sach: ");
    				scanf("%f%*c",&gia);
    				p->infor.gia=gia;
    				q.tail=p;
    				p->next=NULL;
    
    			}
    			p=q.head;
    			free(p);
    	}
    
    void inds(shop *p)
    	{
    		char ten[30];
    		int ma;
    		float gia;
    		printf("Thong tin sach ban vua nhap la:\n ");
    		while(p!=NULL)
    			{
    				printf("%10s %10d %10f\n",p->infor.ten,p->infor.ma,p->infor.gia);
    				p=p->next;
    			}
    
    	}
    int demsach(shop *p,char tim[])
    	{
    		int dem=0;
    		p=q.head;
    		while(p!=NULL)
    			{
    				if(strcmp(p->infor.ten,tim)==0)
    				{
    					dem++;
    				}
    				p=p->next;
    			}
    		return dem;
    	}
    
    
    void main(void)
    	{
    		clrscr();
    		char ten[30];
    		int tong;
    		shop *p;
    		nhapds(p);
    
                    // mình nghĩ vấn đề là từ chỗ này nhưng không hiểu sai ở đâu.                
    		printf("Nhap vao ten sach can tim: ");
    		gets(ten);
    		tong=demsach(p,ten);          
    		if(tong>0)	printf(" %d ",tong);
    		if(tong==0)	printf("NULL.");
    
    
    		free(p);
    		getch();
    	}
    code demsach sẽ in ra tổng số sách có trong kho có cùng tên với quyển sách cần tìm và sẽ in ra NULL nếu ko có quyển sách cần tìm
    Đã được chỉnh sửa lần cuối bởi quicksilver89 : 17-03-2009 lúc 09:29 PM.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi quicksilver89 Xem bài viết
    ko hiểu code phần demsach của mình sai chỗ nào mà sau khi chạy xog ctrinh nó lại đơ đây là code của mình nhờ mọi người check dùm
    Code:
    #include "stdio.h"
    #include "conio.h"
    #include "alloc.h"
    #include "string.h"
    #include "stdlib.h"
    
    struct thongtin
    	{
    		char ten[30];
    		int ma;
    		float gia;
    
    	};
    struct shop
    	{
    		struct thongtin infor;
    		shop *next;
    	};
    struct ds
    	{
    		shop *head;
    		shop *tail;
    	};
    
    ds q;
    void nhapds(shop *p);
    void inds(shop *p);
    int demsach(shop *p,char tim[]);
    
    
    
    void nhapds(shop *p)
    	{
    		char ten[30];
    		int ma;
    		float gia;
    		while(1)
    			{
    				printf("Nhap vao ten sach: ");
    				gets(ten);
    				if(ten[0]==0) break;
    				if(q.head==NULL)
    					{
    						q.head=(shop*)malloc(sizeof(shop));
    						q.head=p;
    					}
    				else
    					{
    						p->next=(shop*)malloc(sizeof(shop));
    						p=p->next;
    					}
    				strcpy(p->infor.ten,ten);
    				printf("Nhap vao ma cua quyen sach: ");
    				scanf("%d%*c",&ma);
    				p->infor.ma=ma;
    				printf("Nhap vao gia quyen sach: ");
    				scanf("%f%*c",&gia);
    				p->infor.gia=gia;
    				q.tail=p;
    				p->next=NULL;
    
    			}
    			p=q.head;
    			free(p);
    	}
    
    void inds(shop *p)
    	{
    		char ten[30];
    		int ma;
    		float gia;
    		printf("Thong tin sach ban vua nhap la:\n ");
    		while(p!=NULL)
    			{
    				printf("%10s %10d %10f\n",p->infor.ten,p->infor.ma,p->infor.gia);
    				p=p->next;
    			}
    
    	}
    int demsach(shop *p,char tim[])
    	{
    		int dem=0;
    		p=q.head;
    		while(p!=NULL)
    			{
    				if(strcmp(p->infor.ten,tim)==0)
    				{
    					dem++;
    				}
    				p=p->next;
    			}
    		return dem;
    	}
    
    
    void main(void)
    	{
    		clrscr();
    		char ten[30];
    		int tong;
    		shop *p;
    		nhapds(p);
    
                    // mình nghĩ vấn đề là từ chỗ này nhưng không hiểu sai ở đâu.                
    		printf("Nhap vao ten sach can tim: ");
    		gets(ten);
    		tong=demsach(p,ten);          
    		if(tong>0)	printf(" %d ",tong);
    		if(tong==0)	printf("NULL.");
    
    
    		free(p);
    		getch();
    	}
    code demsach sẽ in ra tổng số sách có trong kho có cùng tên với quyển sách cần tìm và sẽ in ra NULL nếu ko có quyển sách cần tìm
    sai cực kì cơ bản bạn à
    PHP Code:
    printf("Nhap vao ten sach: ");
                    
    gets(ten); 
    theo mình được biết thì tất cả các sách bây giờ đều đề cập đến lỗi của gets() bạn hãy tìm mà đọc nha, trong diễn đàn mình cũng giải thích nhiều về stdin và lỗi trôi hàm gets() rồi , bạn sử dụng chức năng tìm kiếm nha.


    gợi ý cho bạn : trước khi dùng gets() hãy thêm fflush(sdtin) vào là được...
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    để hiểu thêm thì bạn hãy đọc rõ bài này nha
    http://forums.congdongcviet.com/show...ghlight=cscanf

    ( lỗi của gets() cũng là nguyên nhân như trên )



    trích dẫn cho bạn luôn:



    đặc tính của cscanf và gets khác với scanf ở chỗ :
    + scanf sau khi nhận được giá trị vào rồi sẽ để con trỏ stdin ( con trỏ luồn dữ liệu vào : standard input ) trỏ vào kí tự kết thúc trường nhập ( có nhiều kí tự được quy định là kết thúc trường tùy theo hàm nhập, thường là : 13 trong bảng ASCII ). Với cách lệnh nhập tiếp theo được xử lý tiếp ( ví dụ getch() tiếp theo thì nó sẽ đưa con trỏ stdin vào kí tự bên cạnh và tiến hành nhập....
    +cscanf và gets thì nó trỏ vào kí tự cuối cùng mà nó nhập vào chứ ko nhảy sang bên kí tự kết thúc trường này. Do vậy nó sẽ làm cho các hàm nhập kí tự tiếp theo bị trội ví dụ như getch() , gets() tiếp theo bị trôi . ( đặc tính của nhập kí tự bị trôi với 1 vài trường hợp ( để ko loãng bài viết tôi xin ko trình bày ở đây )



    ví dụ dễ hiểu :

    luồn nhập vào : _ H E L L O \13
    ( \13 coi là kí tự kết thúc trường nhập, quên cách kí hiệu rồi )
    _ là vị trí con trỏ luồng dữ liệu vào stdin
    scanf xong:
    H E L L O \13

    csanf hoặc gets xong :
    H E L L O \13


    để chứng minh điều tôi nói là đúng bạn chỉ cần làm thế này thôi:
    PHP Code:
        cprintf("\nChu vi la: %6.2f",2*PI*r); 
        
    printf("%c",getch());
        
    getch(); 
    chúc bạn thành công
    Đã được chỉnh sửa lần cuối bởi langman : 17-03-2009 lúc 10:48 PM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    ~,,,~ đúng là 1 lỗi cơ bản không đáng phải mắc thank langman nhé

    P/S: Sư huynh em mà biết chắc a ý la e chết mất ~,,,~

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi quicksilver89 Xem bài viết
    ~,,,~ đúng là 1 lỗi cơ bản không đáng phải mắc thank langman nhé

    P/S: Sư huynh em mà biết chắc a ý la e chết mất ~,,,~
    ko phải đâu bạn à ...
    cái cơ bản là cái dễ sai nhất... vì ta ko hay đề phòng

    bạn chỉ nên tìm hiểu những chỗ mình hay sai, qua đó sẽ khắc phục, ko nên ngại vì nó .


    thắc mắc là rất tốt, vì bạn chăm học nên mới có thắc mắc ...

    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

  1. Lập trình C++ Xin check lỗi dùm
    Gửi bởi shockdaica trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 21-10-2013, 11:52 PM
  2. check lỗi dùm các huynh.Sử dụng using System.Configuration
    Gửi bởi trinhhoa trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-09-2013, 08:16 PM
  3. Check dùm cách gọi hàm operator này với
    Gửi bởi quicksilver89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 17-10-2009, 02:19 PM
  4. Hàm sắp xếp trog link list, check dùm mình hàm này với?
    Gửi bởi quicksilver89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 19-04-2009, 11:19 AM
  5. Hỏi về XMLSerializer Check dùm mình lỗi khi sử dụng
    Gửi bởi dkhoa19869 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 28-03-2009, 04:52 PM

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