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

Đề tài: xem dùm mình tại sao sai cho nay .thanks

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

    Mặc định xem dùm mình tại sao sai cho nay .thanks

    C Code:
    1. #include"stdio.h"
    2. #include"conio.h"
    3. void nhap(char *chuoi)
    4. {
    5.     printf("nhap chuoi :");
    6.     gets(chuoi);
    7. }
    8. void xuat(char *chuoi)
    9. {
    10.     printf("xuat chuoi :");
    11.     puts(chuoi);
    12. }
    13. void mystrlen(char *chuoi)
    14. {
    15.  
    16.     int i=0;
    17.     while(chuoi[i]!='\0')
    18.     i++;
    19.     printf("%d",i);
    20. }
    21. void tktt(char *chuoi,int n)
    22. {
    23.     printf("nhap vi tri can trich :");
    24.     scanf("%d",&n);
    25.     printf("trich ki tu trai :");
    26.     for(int i=0;i<n;i++)
    27.     printf("%c",chuoi[i]);
    28. }
    29. void tktp(char *chuoi,int n)
    30. {
    31.     printf("nhap vi tri can trich :");
    32.     scanf("%d",&n);
    33.     printf("trich ki tu phai :");
    34.     for(int i=mystrlen(chuoi)-n;i<mystlen(chuoi);i++)
    35.     printf("%c",chuoi[i]);
    36. }
    37.  
    38. main()
    39. {
    40.     clrscr();
    41.     char *chuoi;
    42.     int n;
    43.     nhap(chuoi);
    44.     xuat(chuoi);
    45.     tktt(chuoi,n);
    46.         tktp(chuoi,n);
    47.     getch();
    48.  
    49. }

    *Chú ý: Bỏ code vào tg code
    Đã được chỉnh sửa lần cuối bởi kenzi_100c : 28-12-2008 lúc 05:29 PM.

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    kenzi_100c: sử dụng con trỏ, bạn cần cấp phát bộ nhớ cho nó trước đã, hãy đọc lý thuyết cấp phát động của C, dùng malloc calloc

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

    Code của bạn có quá nhiều lỗi.

    Ví dụ: Hàm mystrlen() của bạn, nó không trả về bất cứ giá trị nào (void mystrlen() ). Thế nhưng bạn vẫn cứ viết :

    for(int i=mystrlen(chuoi)-n;i<mystlen(chuoi);i++)

    Bảo sao nó không lỗi ? Nên đính kèm thêm thư viện xử lý chuỗi :

    #include <string.h>

    và viết lại hàm là :

    int mystrlen(char *chuoi)
    {
    int i=0;
    while(chuoi[i]!='\0')
    i++;
    //printf("%d",i);
    return i;
    }


    Ngoài ra có một số chỗ viết sai chính tả. (Vd : mystrlen() viết thành mystlen() )

    -------------

    Ngoài ra nữa, hàm nhap() của bạn trả về 1 con trỏ chỗi (biến chuoi)- điều này hợp lệ, và con trỏ đó được truyền thành công ra ngoài - nhưng - vùng nhớ mà con trỏ đó trỏ đến lại là vùng nhớ địa phương (theo mình biết nó là stack)
    Nên - dù hàm main lấy được con trỏ (lưu trong biến chuoi) thì cũng không lấy được giá trị vùng nhớ. (Vì chỉ có hàm nhap() mới có quyền lấy giá trị của vùng nhớ đó)

    Bạn nên học cách dùng các hàm cấp phát vùng nhớ là malloc() và alloc(), 2 hàm này sẽ tạo ra các vùng nhớ trung gian giúp bạn truyền các biến mãng và chuỗi giữa các hàm trong C một cách dễ dàng. (Các vùng nhớ mà hàm nào cũng có thể truy xuất )

    ---------------------------
    Dưới đây là code mình viết lại, hy vọng nó chạy (Viết = VC++6.0)


    Code:
    #include"stdio.h"
    #include"conio.h"
    #include"stdlib.h"
    
    
    void nhap(char *chuoi)
    {
        printf("nhap chuoi :");
        gets(chuoi);
    }
    void xuat(char *chuoi)
    {
        printf("xuat chuoi :");
        puts(chuoi);
    }
    int mystrlen(char *chuoi)
    {
        int i=0;
        while(chuoi[i]!='\0')
        i++;
        //printf("\ndo dai chuoi la : %d",i);
    	return i;
    }
    void tktt(char *chuoi,int *n)
    {
        printf("\nnhap vi tri can trich :");
        scanf("%d",n);
        printf("\ntrich ki tu trai :");
        for(int i=0;i<*n;i++)
        printf("%c",chuoi[i]);
    }
    void tktp(char *chuoi,int *n)
    {
        printf("\nnhap vi tri can trich :");
        scanf("%d",n);
        printf("\ntrich ki tu phai :");
        for(int i=mystrlen(chuoi)-*n;i<mystrlen(chuoi);i++)
        printf("%c",chuoi[i]);
    }
    
    int main()
    {
        //clrscr();
        char *chuoi = (char *)malloc(100);
        int *n = (int *)malloc(100*sizeof(int));
        nhap(chuoi);
        xuat(chuoi);
        tktt(chuoi,n);
            tktp(chuoi,n);
        getch();
    	return 0;
    }

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. Lập trình C tìm lỗi dùm em với
    Gửi bởi dammelaptrinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 20-12-2011, 12:23 AM
  3. Nhớ mấy anh đánh giá dùm CV của em
    Gửi bởi tomahutbui trong diễn đàn Thắc mắc chung
    Trả lời: 6
    Bài viết cuối: 10-06-2011, 06:01 PM
  4. Mình mới vừa học lập trình ,xin fix lỗi dùm mình và cho mình hỏi 1 vải điều .
    Gửi bởi ANHCHANG60GIAY trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 30-04-2010, 11:40 AM
  5. xem dùm bài đệ quy t=x^n??
    Gửi bởi #include# trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 10-04-2008, 11:41 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