Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 21 kết quả

Đề tài: Bị lỗi không rõ nguyên nhân khi nhập 1 kí tự

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

    Post Bị lỗi không rõ nguyên nhân khi nhập 1 kí tự

    Chào các bác, em mới học lập trình C và đang có 1 bài tập gồm 4 menu.
    Em đang vướng 1 lỗi em chưa gặp bao giờ, mong các bác giải đáp giúp em
    Chỗ em đánh dấu đỏ ấy ạ, dù em dùng getchar hay getch thì đều bị bỏ qua bước nhập này :((
    Thanksssssssssss các bác
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    struct Person
    {
    	char name[100];
      	char ngaysinh[20];
    };
    
    struct Student
    {
    	struct Person info;
    	int id;
       	char Class[20];
       	char School[50];
    };
    struct Student *st;
    int n;
    
    void Nhap_dulieu()
    {
    	char q;
    	int i;
    	printf("\n------------ NHAP DU LIEU ------------\n");
    	printf("So luong sinh vien ma ban muon nhap:");
    	scanf("%d",&n);
    	st=( struct Student *)malloc(n *sizeof(struct Student));
       	for(i=0; i<n; i++)
       	{
    	 	printf(" Sinh vien thu %d:",i+1);
          	fflush(stdin);
          	gets(st[i].info.name);
    
          	printf(" Nhap ngay sinh:");
          	scanf("%s",st[i].info.ngaysinh);
    
          	printf(" Nhap id:");
          	scanf("%d",&st[i].id);
    
          	printf(" Nhap lop:");
          	scanf("%s",st[i].Class);
    
          	printf(" Nhap truong:");
          	scanf("%s",st[i].School);
       	}
       	printf(" Nhap du lieu thanh cong\n");
       	printf(" Ban co muon ghi file khong Y/N:");
       	scanf ("%c", &q);
    }
    
    main()
    {
    	Nhap_dulieu();
    }
    ** Em còn 1 điều muốn hỏi nữa là có cách nào để xóa cùng lúc nhiều bộ nhớ đệm của C đc k ạ?
    Bài em làm nó thường bị bỏ qua bước nhập tên vì em dùng gets, phải chạy 2-3 lần mới đc và em phải cho đến hơn 20 cái fflush(stdin) :((

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Code:
          	fflush(stdin);
    Thêm vào trước scanf().
    hay dùng getch đi em.

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

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    Code:
          	fflush(stdin);
    Thêm vào trước scanf().
    hay dùng getch đi em.
    ok thanks ạ, đây chỉ là 1 phần của bài thôi nên 1 cái fflush là đc, nhưng mà bài đầy đủ của em cho bao nhiêu cũng k đc :((

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

    cái bộ nhớ đệm thì theo mình hiểu là nó lưu lại cái dâu enter mỗi khi ta nhập vào mộ cái gì đó vậy thì bạn xóa nó trước rồi sau đó nhập cái khác thì nó lại lưu cái mới vào đó thì làm sao mà chỉ dùng một cái để xóa cho cả được (theo mình hiểu là vậy không biết có đúng không nữa)
    C Code:
    1. printf(" Lê đình Chung \n");
    2. Printf(" trường CĐ CNTT hữu nghị Việt-Hàn ");

  5. #5
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    ha gets "ngốn" bỏ nút enter rồi mà...con scanf("%d%*c"); thêm cái %*c vào cũng đc @@
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

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

    Mặc định Bị lỗi không rõ nguyên nhân khi nhập 1 kí tự

    Trích dẫn Nguyên bản được gửi bởi azurelonely Xem bài viết
    ha gets "ngốn" bỏ nút enter rồi mà...con scanf("%d%*c"); thêm cái %*c vào cũng đc @@
    %*c là sao vậy ??
    cái này em chưa đc học bh` :((

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi mrhuymap1491 Xem bài viết
    %*c là sao vậy ??
    cái này em chưa đc học bh` :((
    Tức là đọc 1 kí tự nhưng mà không lưu nó vào đâu cả

    Khi nhập số, thường người ta kết thúc bằng phím Enter
    ví dụ 1234<Enter>
    số 1234 sẽ được đọc vào biến còn phím Enter ( mã 13) sẽ tồn tại trong bộ đệm bàn phím, khiến cho việc nhập kí tự về sau bị sai
    %*c sẽ loại nó khỏi bộ đệm

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    14

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    Tức là đọc 1 kí tự nhưng mà không lưu nó vào đâu cả

    Khi nhập số, thường người ta kết thúc bằng phím Enter
    ví dụ 1234<Enter>
    số 1234 sẽ được đọc vào biến còn phím Enter ( mã 13) sẽ tồn tại trong bộ đệm bàn phím, khiến cho việc nhập kí tự về sau bị sai
    %*c sẽ loại nó khỏi bộ đệm
    ah em hỉu rùi, nhưng em muốn khi nhập họ tên nó lưu luôn đc cả dấu ' ' cơ :(

  9. #9
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Trích dẫn Nguyên bản được gửi bởi mrhuymap1491 Xem bài viết
    ah em hỉu rùi, nhưng em muốn khi nhập họ tên nó lưu luôn đc cả dấu ' ' cơ :(
    sài gets(<biến chuổi>) nó đọc cả space và ngốn enter
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  10. #10
    Ngày gia nhập
    07 2011
    Bài viết
    14

    Trích dẫn Nguyên bản được gửi bởi azurelonely Xem bài viết
    sài gets(<biến chuổi>) nó đọc cả space và ngốn enter
    em dùng cái này trong bài nhiều quá nên mỗi khi chạy chương trình là nó lại bỏ qua bước nhập khi dùng gets rồi bị lỗi, :((

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

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Tối ưu Code nhập số nguyên dương rồi đảo ngược số nguyên dương vừa nhập trong C
    Gửi bởi tyrant trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 07-10-2012, 11:07 PM
  3. Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên.
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 19-06-2011, 01:05 PM
  4. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  5. Trả lời: 16
    Bài viết cuối: 16-07-2010, 06:44 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