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

Đề tài: Lỗi C có 1 không 2!!! Sửa được mới là cao thủ!!!

  1. #1
    Ngày gia nhập
    10 2011
    Nơi ở
    Đà Nẵng
    Bài viết
    2

    Wink Lỗi C có 1 không 2!!! Sửa được mới là cao thủ!!!

    // Em vừa viết đoạn code sau

    #include <stdio.h>
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    char s[50] = "";
    char *dochangty(unsigned int n)
    {
    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
    int donvi, chuc, tram;

    s[0]=0;
    donvi = n % 10;
    n /= 10;
    chuc = n % 10;
    tram = n / 10;
    if (tram > 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }
    if (tram == 0)
    {
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else
    if(chuc==0)
    if(donvi>0)
    strcat(s,kyso[donvi]);
    }
    return s;
    }

    char *dochangtrieu(unsigned int n, int kt)
    {
    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
    int donvi, chuc, tram;

    s[0]=0;
    donvi = n % 10;
    n /= 10;
    chuc = n % 10;
    tram = n / 10;
    if(kt>0)
    {
    if (tram >= 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }}
    if(kt==0)
    {
    if (tram > 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }
    if(tram==0)
    {
    if(chuc>0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else
    if(chuc==0)
    if(donvi>0)
    strcat(s,kyso[donvi]);
    }
    }
    return s;
    }
    char *dochangnghin(unsigned int n, int kt)
    {
    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
    int donvi, chuc, tram;

    s[0]=0;
    donvi = n % 10;
    n /= 10;
    chuc = n % 10;
    tram = n / 10;
    if(kt>0)
    {
    if (tram >= 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }}
    if(kt==0)
    {
    if (tram > 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }
    if(tram==0)
    {
    if(chuc>0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else
    if(chuc==0)
    if(donvi>0)
    strcat(s,kyso[donvi]);
    }
    }
    return s;
    }
    char *dochangtram(unsigned int n, int kt)
    {
    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
    int donvi, chuc, tram;

    s[0]=0;
    donvi = n % 10;
    n /= 10;
    chuc = n % 10;
    tram = n / 10;
    if(kt>0)
    {
    if (tram >= 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }}
    if(kt==0)
    {
    if (tram > 0)
    {
    strcat(s, kyso[tram]);
    strcat(s, " tram ");
    if (chuc > 0)
    {
    if (chuc== 1)
    strcat(s, "muoi ");
    else
    {
    strcat(s, kyso[chuc]);
    strcat(s, " muoi ");
    }
    if (donvi > 0)
    {
    if (donvi == 1)
    strcat(s, "mot ");
    else if (donvi == 5)
    strcat(s, "lam");
    else
    strcat(s, kyso[donvi]);
    }
    }
    else if(chuc==0)
    {
    if(donvi>0)
    {
    strcat(s,"le ");
    strcat(s,kyso[donvi]);
    }
    }
    }
    }
    return s;
    }
    void main()
    {
    unsigned long n;
    unsigned ngan, trieu, ty, donvi;
    char chuoi[200];
    clrscr();
    printf("\nNhap mot so: ");
    scanf("%ld", &n);
    printf("So %ld doc bang chu la :\n", n);
    if (n == 0)
    printf("khong");
    else
    {
    donvi = n % 1000;
    n /= 1000;
    ngan = n % 1000;
    n /= 1000;
    trieu = n % 1000;
    ty = n / 1000;
    chuoi[0] = 0;
    if (ty > 0)
    printf("%s ty ", dochangty(ty));
    if (trieu > 0)
    printf("%s trieu ", dochangtrieu(trieu,ty));
    if (ngan > 0)
    printf("%s ngan ", dochangnghin(ngan,trieu));
    if (donvi > 0)
    printf("%s", dochangtram(donvi,ngan));
    }
    getch();
    }


    Các bác xem kĩ đoạn code nha. Thấy dài cũng chẳng có gì đâu, các hàm toàn giống nhau thôi. Nhưng có 1 cái em không hiểu vì sao Nếu tram == 0 thì kyso[tram] lại đọc là khongmot. Ai giải thích giúp em chỗ này với. Nghĩ mãi mà ko ra

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

    Trích dẫn Nguyên bản được gửi bởi tanhien90vn Xem bài viết
    // Em vừa viết đoạn code sau
    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
    Các bác xem kĩ đoạn code nha. Thấy dài cũng chẳng có gì đâu, các hàm toàn giống nhau thôi. Nhưng có 1 cái em không hiểu vì sao Nếu tram == 0 thì kyso[tram] lại đọc là khongmot. Ai giải thích giúp em chỗ này với. Nghĩ mãi mà ko ra
    Sửa cái char kyso[10][5] thành char kyso[10][6] xem sao.

  3. #3
    Ngày gia nhập
    10 2011
    Nơi ở
    Đà Nẵng
    Bài viết
    2

    Cảm ơn ông anh! Không biết ông anh đoán mò hay đỉnh cao thiệt mà ông anh nói đúng rồi, nếu biết thì giải thích vì sao giùm cái nha. Còn không biết cũng không sao. Dù sao cũng xin cảm ơn rất nhiều!!!

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

    Trích dẫn Nguyên bản được gửi bởi tanhien90vn Xem bài viết
    Cảm ơn ông anh! Không biết ông anh đoán mò hay đỉnh cao thiệt mà ông anh nói đúng rồi, nếu biết thì giải thích vì sao giùm cái nha. Còn không biết cũng không sao. Dù sao cũng xin cảm ơn rất nhiều!!!
    Cái chuỗi "khong" có 5 char, vậy phải dùng char[6] để lưu, mò mẫm thì bao giờ mới xong cái đống code rối rắm của cậu.

  5. #5
    Ngày gia nhập
    10 2011
    Nơi ở
    Đà Nẵng
    Bài viết
    2

    Nhưng mình chỉ cần đủ không được à. Tại sao phải là char[6] mới lưu được

  6. #6
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Mặc định Lỗi C có 1 không 2!!! Sửa được mới là cao thủ!!!

    thí dụ tên 10 char thì phải dùng mảng 11 để lưu.
    kí tự kết thúc NULL xí phần cuối.
    HT117-5277

  7. #7
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    bài này move vô đây là chuẩn lí công uẩn luôn.
    Code của bác viết ở trên thì đúng là "có 1 không 2" sửa không đc, không biết sửa luôn.

    P/S: Chúc ăn đc nhiu gạch

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Thế mới gọi là: Sửa được mới là cao thủ

    Em là "lùn thủ" nên chỉ dám nhìn, không dám sờ.

    Chúc các bác sớm thành cao thủ nhé!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  9. #9
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    hix, mình lùn mà cũng chả dám ngó. Nhìn sơ qua cái code choáng hết cả váng @@

  10. #10
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Thưa bác chủ topic, em mới học c. Nhìn sơ qua thì đã thấy bác sai cơ bản ngay từ dòng đầu tiên rồi bác ạ :

    char kyso[10][5]= {"khong","mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};

    chuỗi "khong" có length = 5, nhưng nó cần phải thêm 1 ký tự nữa để làm ký tự kết thúc chuỗi, tức là cần 6. Nhưng mảng mà bác khai báo chỉ có 5 thôi. Nó ko có ký tự kết thúc nên nó chạy tràn qua chuỗi kế bên là "mot". Rất may cho bác là chuỗi này length = 3, thêm 1 nữa là 4 vẫn < 5 nên nó có ký tự kết thúc. Chính vì thế nó mới in ra liền tù tì "khongmot". Bác ko tin thì cứ thử để tất cả các chuỗi có 5 ký tự thử xem, nó in ra nguyên dây luôn cho bác đấy.

    Kiến thức em nhỏ mọn chỉ biết có thế. Có gì sai các bác chỉ bảo thêm giùm chứ đừng chém em.
    Chào bác !
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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