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

Đề tài: các pro test dùm em đoạn code sau xem đó là lỗi gì với

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

    Mặc định các pro test dùm em đoạn code sau xem đó là lỗi gì với

    đây là code:
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <process.h>
    
    	int i,j,n,lc;
    	float tg;
    	struct sinhvien
    	{	char name[30];
    		int date;
    		float diem;
    	} sv[30];
    
    void nhap()
    {
    	printf("Nhap so luong sinh vien: "); scanf("%d",&n);
    	while (n<5||n>30)
    	{	clrscr();
    		printf("Nhap so luong sinh vien: "); scanf("%d",&n);
    	}
    	for (i=1; i<=n; i++)
    	{	fflush(stdin);
    		printf("\nnhap ten sinh vien thu %d: ",i); gets(sv[i].name);
    		printf("\nnhap ngay sinh cua sinh vien thu %d: ",i); scanf("%d",&sv[i].date);
    		printf("\nnhap diem sinh vien thu %d: ",i); scanf("%f",&sv[i].diem);
    	}
    }
    
    void sxdiem()
    {
    	for (i=1; i<n; i++)
    		for (j=i+1; j<=n; j++)
    			if (sv[i].diem<sv[j].diem)
    			{	tg=sv[i].diem;
    				sv[i].diem=sv[j].diem;
    				sv[j].diem=tg;
    			}
    }
    
    void dscuoi()
    {
    	sxdiem();
    	printf("\ndanh sach 5 sinh vien diem thap nhat");
    	for (i=n; i>n-5; i--)
    		printf("\nsinh vien %s diem %d",sv[i].name,sv[i].diem);
    }
    
    
    void main()
    {
    	clrscr();
    	nhap();
    	clrscr();
    	printf("\n            Menu");
    	printf("\n1.Hien danh sach sinh vien sap xep theo diem");
    	printf("\n2.Hien danh sach 5 sinh vien co diem thap nhat");
    	printf("\n3.Thoat");
    	printf("\nNhap menu ban chon: "); scanf("%d",&lc);
    	switch (lc)
    	{	
    		case 1: sxdiem(); for(i=1; i<=n; i++)
    				  printf("\nsinh vien %s diem %d ",sv[i].name,sv[i].diem);
    				break;
    		case 2: dscuoi();break;
    		case 3: exit(0);break;
    	}
    	getch();
    }
    chg trình trên chạy với đề bài là:
    nhập số lượng và thông tin (họ tên, ngày sinh, điểm thi) của sinh viên. hiện menu lựa chọn 1: hiện dsách sv sx theo điểm, 2: hiện dsách 5 sv có điểm thấp nhất.

    Đoạn code trên em mắc lỗi, khi nhập xong ngày sinh sv thì chg trình thoát ra và ko cho nhập điểm thi. Alt+F5 nó có dòng báo lỗi " scanf: floating formats not linked Abnormal program termination"

    Các pro có thể giải thích cho em tại sao lại mắc lỗi đó đc ko??? thanks các pro

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    scanf() + gets() -> horrible solution.
    C Code:
    1. int i,j,n,lc;
    2.     float tg;
    Không bao h xài biến global trừ khi nó là const, mà trong C tui nghĩ chắc cũng không có const keyword.
    Dòng này :
    C Code:
    1. printf("\nnhap diem sinh vien thu %d: ",i); scanf("%f",&sv[i].diem);
    bỏ flush(stdin); vào sau nó thử xem.
    Code:
    struct sinhvien
    	{	char name[30];
    		int date;
    		float diem;
    	} sv[30];
    Kiểu global sv[30] này đã quá lạc hậu rùi.
    Muốn thì vào main() sinh vien arrOfSV[30]; nó sẽ rõ ràng hơn. Code cậu viết sao mà sexy quá T_T, đọc vào oải ghê.

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Uhm cái này có chút vấn đề ở đây
    C Code:
    1. printf("\nnhap diem sinh vien thu %d: ",i); scanf("%f",&sv[i].diem);
    Ở đây hàm scanf nhập với số thực sẽ có vấn đề mà đến giờ mình vẫn không hiểu tại sao luôn, bạn phải tạo 1 biến phụ sau đó nhập và gán nó cho sv[i].diem thì được.Check it out.Have fun
    ttecak ?

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

    " scanf: floating formats not linked Abnormal program termination"
    Đây là 1 lỗi thường gặp của các trình biên dịch (nếu tôi không nhầm thì cậu sử dụng trình biên dịch Borland) trong việc liên kết thư viện.Để fix nó cậu khai báo 1 biến có kiểu float bất kỳ
    Code:
    float a=2.0 ;
    bỏ flush(stdin); vào sau nó thử xem.
    Tại sao lại phải cho thằng fflush(stdin) vào đây vậy?.Điểm khác biệt giữa
    Code:
    scanf("%d",&a);/* hoặc */ scanf("%f",&a);
    với
    Code:
    scanf("%c",&a);

    %d,%f sẽ không đọc '\n' vào biến trong khi %c sẽ đọc vào biến,để %c không đọc ký tự '\n' vào biến thì có thể thêm khoảng trắng vào trước nó
    Code:
    scanf( " %c",&a);

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Tại sao lại phải cho thằng fflush(stdin) vào đây vậy?.Điểm khác biệt giữa
    Vì tui thường thấy họ dùng gets() + fflush() nên tui chỉ đoán vậy thui. Cậu thông cảm vì tui thực sự không chuyên về C với lại code này tui cũng chưa hề bỏ vào compiler vì khi tui thấy variable cả for mà hắn bỏ vào global thì tui cũng chẳng muốn đọc nữa, nhưng nói thế thì thật vô trách nhiệm, tui sẽ rút kinh nghiệm điểm này.
    C Code:
    1. scanf( " %c",&a);
    Còn về vấn đề này thì thực sự tui không biết, cám ơn cậu .

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

    Mặc định các pro test dùm em đoạn code sau xem đó là lỗi gì với

    Nếu gọi lệnh nhập chuỗi phía sau lệnh scanf thì phải chèn hàm flushall hoặc flush(stdin) giữa scanf và gets để xóa vùng đệm bàn phím...

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

  1. Lập trình C++ coi dùm minh bài code sai ở chỗ nào và sữa dùm mình với
    Gửi bởi hchuy94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 02-09-2013, 10:16 AM
  2. vẽ đa giác đối xứng qua 3 trục - Mọi người test dùm...
    Gửi bởi noob1810 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 0
    Bài viết cuối: 04-07-2012, 04:42 PM
  3. Share code xử lý SMS đã test 100% thành công
    Gửi bởi davidhuynhvan trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 14-10-2011, 12:35 AM
  4. Mọi người test đoạn code này cho mình cái
    Gửi bởi tungk58t2 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-12-2008, 10:13 PM
  5. Chương trình vẽ đồ thị hàm số - nhờ mọi người test dùm
    Gửi bởi sutuluoi7777 trong diễn đàn Sản phẩm phần mềm của bạn
    Trả lời: 1
    Bài viết cuối: 26-02-2008, 05:37 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