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

Đề tài: Sắp xếp chuỗi trên C | In tên ra theo thứ tự a,b,c

  1. #1
    Ngày gia nhập
    06 2009
    Bài viết
    9

    Wink Sắp xếp chuỗi trên C | In tên ra theo thứ tự a,b,c

    sao mình viết nó chạy mà ko ra kết quả đúng vậy, mấy bạn xem hộ mình thử
    PHP Code:
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    void main()
    {
        
    char ten[10][20];
        
    char tam[20];
            
    int i=0,j,a;
        
    printf(" \n nhap vao ten hoc sinh va nhan end de ket thuc: ");
        do
        {       
    printf("\n ten hoc sinh thu %d la: ",a=i+1);
                
    scanf("%s",&ten[i]);
        }       while(
    strcmp(ten[i++],"end"));
        
    printf("\n ten hoc sinh sau khi sap xep la:");
        for(
    i=0;i<a-1;i++);                                          
        {
            for(
    j=i+1;j<a;j++)
            {
                if(
    strcmp(ten[i],ten[j])>0)
                 {
                     
    strcpy(tam,ten[i]);
                    
    strcpy(ten[i],ten[j]);
                    
    strcpy(ten[j],tam);
                             }
            }
        }
        for(
    i=0;i<a-1;i++)
            
    printf("\n hoc sinh thu %d la: %s",i+1,ten[i]);


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

    ngay chỗ for (i=0;i<a-1;i++);
    bạn bỏ dấu chấm phẩy đi là chạy đc

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Có mấy điều thế này
    - Thứ 1 cậu dùng mảng char ten[10][20] để biểu diễn mảng 10 chuỗi, mỗi chuỗi có độ dài tối đa là 19 là chưa đúng. Xem lại xem ten[i] nó nằm ở chỗ nào, không đúng như cậu nghĩ đâu
    Tôi đề nghị sửa dùng mảng char *ten[10] và hàm strdup.
    -
    C Code:
    1. scanf("%s", &ten[i])
    Phải xem xem cái mình truyền vào đã là địa chỉ chưa chứ đừng thấy scanf là lao đầu vào thêm & vào. Cái này sao nhiều người mắc thế không biết?
    - Cuối cùng là cái vòng for thứ nhất, tự nhiên mọc đâu ra cái dấu ";" thế không biết.

    Cậu sửa lại đi rồi post code lên!!
    I don't wanna waste another day

  4. #4
    Ngày gia nhập
    06 2009
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi developer Xem bài viết
    Có mấy điều thế này
    - Thứ 1 cậu dùng mảng char ten[10][20] để biểu diễn mảng 10 chuỗi, mỗi chuỗi có độ dài tối đa là 19 là chưa đúng. Xem lại xem ten[i] nó nằm ở chỗ nào, không đúng như cậu nghĩ đâu
    Tôi đề nghị sửa dùng mảng char *ten[10] và hàm strdup.
    -
    C Code:
    1. scanf("%s", &ten[i])
    Phải xem xem cái mình truyền vào đã là địa chỉ chưa chứ đừng thấy scanf là lao đầu vào thêm & vào. Cái này sao nhiều người mắc thế không biết?
    - Cuối cùng là cái vòng for thứ nhất, tự nhiên mọc đâu ra cái dấu ";" thế không biết.

    Cậu sửa lại đi rồi post code lên!!
    mình ko hiểu lắm,
    thứ nhất>> tại sao char ten[10][20] lại sai, mình khai báo char[][20] duoc ko
    thứ 2>> char *ten[10] là khai báo con trỏ phải không, sao nó chỉ có ten[10 ] vay

  5. #5
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Khai báo char ten[10][20] thì thực ra không sai, nhưng bạn làm vòng lặp theo kiểu chờ kí tự end xuất hiện thì có khả năng tràn bộ nhớ (overflow) khi chỉ mục của mảng vượt quá 9, i=10 chẳng hạn
    Khai báo char[][20] sẽ không được.
    Phải xem xem cái mình truyền vào đã là địa chỉ chưa chứ đừng thấy scanf là lao đầu vào thêm & vào. Cái này sao nhiều người mắc thế không biết?
    - Cuối cùng là cái vòng for thứ nhất, tự nhiên mọc đâu ra cái dấu ";" thế không biết.
    Đúng là bạn ấy chưa hiểu bản chất vấn đề về &, tuy nhiên trong trường hợp của mảng trong bài này của bạn ấy, thì &a[i] cũng tương đương là a[i] nên không có vấn đề gì
    Đã được chỉnh sửa lần cuối bởi icttrack : 03-06-2009 lúc 01:53 AM.

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

    Mặc định Sắp xếp chuỗi trên C | In tên ra theo thứ tự a,b,c

    Trích dẫn Nguyên bản được gửi bởi icttrack Xem bài viết
    Khai báo char ten[10][20] thì thực ra không sai, nhưng bạn làm vòng lặp theo kiểu chờ kí tự end xuất hiện thì có khả năng tràn bộ nhớ (overflow) khi chỉ mục của mảng vượt quá 9, i=10 chẳng hạn
    Khai báo char[][20] sẽ không được.

    Đúng là bạn ấy chưa hiểu bản chất vấn đề về &, tuy nhiên trong trường hợp của mảng trong bài này của bạn ấy, thì &a[i] cũng tương đương là a[i] nên không có vấn đề gì
    Chưa hiểu lắm, lỗi overflow thì mình có thể khắc phục còn bản chất vấn đề về & thì mình chưa hiểu lắm; mình chỉ biết nếu gán cho biến thì dùng & còn mảng thì không cần & bạn có thể nói rõ hơn cho mình về & ko .
    Còn nữa 2h sáng bạn vô được congdongcviet.ma sao mình vô nó toàn thông báo serverr quá tải thế

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

  1. Lập trình C [Help] Giải bài Tách tên ra khỏi họ tên và sắp xếp theo từ điển của n người chuổi Ký tự
    Gửi bởi ngoctu_93 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-02-2013, 04:29 PM
  2. Mã nguồn C Sắp Xếp Danh Sách Theo Họ Tên (Kiểu Alpha) và hàm Tách Họ và Tên
    Gửi bởi huugiang954 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 10-04-2012, 06:45 PM
  3. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 AM
  4. đọc file excel theo tên cột hoặc các cột ko theo thứ tự ???
    Gửi bởi xinbat007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 14-05-2010, 10:09 AM
  5. Sắp xếp theo danh sách họ tên trên C#?
    Gửi bởi red_blue trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 12-05-2009, 08:29 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