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

Đề tài: Chuơng trình bỏ qua hàm gets(ch) là lỗi gì?

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    23

    Mặc định Chuơng trình bỏ qua hàm gets(ch) là lỗi gì?

    bài tập chỉ là tạo danh sách liên kết đơn , mỗi cái node là một chuỗi , vấn đề khi mình cho nhập chuỗi thì VS bỏ qua luôn , cuối cùng chả nhập được chuỗi nào hết , ai biết sửa sao không
    Code:
    // On DS LK 2.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    
    typedef struct tagNode
    {
    	char info[20];
    	struct tagNode *pnext;
    }NODE;
    
    typedef struct list
    {
    	NODE* pH;
    	NODE* pT;
    }LIST;
    
    void CreateList(LIST &l)
    {
    	l.pH = NULL;
    	l.pT = NULL;
    }
    
    NODE* GetNode( char* ch )
    {
    	NODE *p;
    	p = new NODE;
    	//char ch[20];
    //	printf("Nhap chuoi: ");
    	strcpy(p->info , ch );
    	p->pnext = NULL;
    	return p;
    }
    
    void InsertFirst ( LIST &l, char* ch )
    {
    	NODE *p;
    
    	p = GetNode( ch );
    	if ( l.pH == NULL )
    		l.pT = l.pH = p;
    	else
    	{
    		p->pnext = l.pH;
    		l.pH = p;
    	}
    }
    
    void InsertTail( LIST &l , char* ch  )
    {
    	NODE *p;
    	p = GetNode(ch);
    	if ( l.pH == NULL )
    		l.pT = l.pH = p;
    	else
    	{
    		l.pT ->pnext = p;
    		l.pT = p;
    	}
    	
    }
    
    void PutList(LIST &l)
    {
    	printf("\nDanh sach lien ket don:\n");
    	NODE *ptemp;
    	ptemp = l.pH;
    	while ( ptemp != NULL )
    	{
    		printf("%5d",ptemp->info);
    		ptemp = ptemp->pnext;
    	}
    }
    
    void main()
    {
    	LIST l;
    	CreateList(l);
    	int n,temp,*p;
    	char ch[20];
    	printf("Nhap so phan tu: "); scanf("%d",&n);
    	for ( int i = 1; i<=n ; i++ )
    	{
    		printf("Nhap chuoi a[%d]:",i);
    		gets(ch);
    		InsertTail(l,ch);
    	}
    //	gets(ch);
    	PutList(l);
    	getch();
    }

  2. #2
    Ngày gia nhập
    06 2012
    Bài viết
    37

    fflush(stdin) trước khi gets() để tránh bị trôi

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

    phải rồi , đơn giản vậy , thanks nhá

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

    Chú ý 1 điều khi đặt tên tham số hình thức nhé
    char thì đặt ch là okies
    char* thì ko ai đặt tên là ch cả, làm tối nghĩa của hàm đi
    char* thì nên đặt là str*
    ví dụ
    ham(char* str1,char* str2)
    ham(char* str)
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Chú ý 1 điều khi đặt tên tham số hình thức nhé
    char thì đặt ch là okies
    char* thì ko ai đặt tên là ch cả, làm tối nghĩa của hàm đi
    char* thì nên đặt là str*
    ví dụ
    ham(char* str1,char* str2)
    ham(char* str)
    Nếu quan tâm đến null-terminated thì tốt nhất là dùng tiền tố sz (string end with zero). Còn nếu không quan tâm đến null-terminated, thì cứ chọn vài cái tên như: data, buffer.... đi kèm với 1 biến chỉ kích thước, size hoặc lenght.
    Ví dụ:
    ham(char* szStr1, char* szStr2);
    ham(char* buffer, unsigned int size);
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Mặc định Chuơng trình bỏ qua hàm gets(ch) là lỗi gì?

    Nguyên nhân chính: Sau khi sử dụng hàm scanf("%d",&n); trong bộ đệm đang còn kí tự enter => hàm gets tại vòng lặp đầu get kí tự enter và chuyển sang vòng lặp tiếp theo
    Giải pháp: dùng hàm fflush(stdin) trước gets
    Đã được chỉnh sửa lần cuối bởi ptn2008 : 02-02-2013 lúc 09:41 AM.

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

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Nếu quan tâm đến null-terminated thì tốt nhất là dùng tiền tố sz (string end with zero). Còn nếu không quan tâm đến null-terminated, thì cứ chọn vài cái tên như: data, buffer.... đi kèm với 1 biến chỉ kích thước, size hoặc lenght.
    Ví dụ:
    ham(char* szStr1, char* szStr2);
    ham(char* buffer, unsigned int size);
    tớ thấy chả cần thiết sz lắm
    chỉ khi vào platform hoặc cc cụ thể của team nào đó thôi

    tham khảo 2 thằng lớn thấy thế
    http://www.cplusplus.com/reference/cstring/strcmp/
    http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

  1. Cách làm chuơng trình sinh mã tự động ASP.NET MVC?
    Gửi bởi dinhtrongtund93 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 18-01-2014, 12:15 PM
  2. Kỹ thuật C++0x Bị đứng máy khi chạy chuơng trình?
    Gửi bởi cuongquoc115 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 13-09-2013, 10:46 AM
  3. Tạo chuơng trinh đa ngôn ngữ cho ứng dụng
    Gửi bởi tinak4 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 01-10-2010, 05:32 PM
  4. thực thi lại chuơng trình. Xin giúp đỡ?
    Gửi bởi phuongduy299 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 27-03-2010, 07:38 PM
  5. Sửa lỗi cho mình bài Chuơng trình hiển thị 2 cửa sổ -2 tiêu đề khác
    Gửi bởi ntd2012 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 15-12-2008, 09:44 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