Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 18
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Máy báo lỗi thiếu ";" nhưng không thấy thiếu?

    Mọi người xem hộ mình xem là code của mình sai ở đâu mà máy cứ báo lỗi ??
    Máy báo lỗi ở dòng 41, lỗi thiếu ;, nhưng mình không hiểu sao lại như thế. Ai giải thích hộ mình được không.

    Mã:
    #include <stdio.h>#include <conio.h> void main(){    int j, i=0, d, m, y, bl=1, count;    printf("TINH SO THU TU NGAY TRONG NAM"    "
    Nhap vao ngay thang nam: ");    scanf("%d%d%d",&d, &m, &y);    //Kiem tra tinh hop le    if (y<0) bl=0;    else        if (y%4==0)            if (y%100!=0) i = 1;            else if (y%400==0) i = 1;        if (m==1||m==3||m==5||m==7||m==8||m==10||m==12)        {            if (d<0||d>32) bl=0;        }        else            if (m==4||m==6||m==9||m==11)            {                if (d<0&&d>31) bl=0;            }            else                if (m==2&&i==0)                {                    if (d<0||d>29) bl=0;                }                else                    if (m==2&&i==1)                    {                        if (d<0||d>30) bl=0;                    }                    else bl=0;    if (bl==0) printf("Ban nhap ngay thang khong hop le.");    //Dem so ngay    else    {        count = d;        for (j=1,j<m,j++)            switch (j)            {                case 1||3||5||7||8||10||12: count+=31;break;                case 2: if(i==0) count+=28; else count+=29;break;                case 4||6||9||11: count+=30;break;            }        printf("Ngay %d thang %d la ngay thu %d trong nam",d,m,count);    }    getch();}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Phần case ko ai viết vậy đâu. Dòng 41 cũng sai.

  3. #3
    cái chố case 1||3||5||7||8||10||12: bạn viết lại thành
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    count+=31;break; các case dưới tuơg tự nhá

  4. #4
    Ngày tham gia
    Sep 2015
    Đang ở
    24 Rạch Bùng Binh , P10,Q3 , HCM
    Bài viết
    0
    Một forum có đến 15 vạn thành viên, bàn chuyện syntax error

    Chưa biết bò đã lo học chạy.

    Bạn cho tôi biết bạn học trường nào, tôi sẽ giúp bạn ngay

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi legiondark
    Máy báo lỗi ở dòng 41, lỗi thiếu ;, nhưng mình không hiểu sao lại như thế. Ai giải thích hộ mình được không.
    41. for (j=1,j<m,j++)
    for gồm có 3 lệnh, mỗi lệnh cách nhau bằng một dấu ";". Như sau:
    for (lệnh khởi dầu; lệnh điều kiện vào vòng; lệnh thực hiện sau mỗi vòng)

    Trong code của bạn có 3 biểu thức, cách nhau bằng dấu phẩy ",". Đối với C, dấu phẩy là toán tử cho nên 3 biểu thức trên được gộp lại thành 1 biểu thức kép và rốt lại chỉ là 1 lệnh.
    Có lẽ vì vậy mà trình dịch bảo là bạn thiếu ";" (mỗi trình dịch có báo lỗi khác nhau, tôi chỉ có thể cho bạn biết câu 41 của bạn sai chỗ nào thôi, còn việc trình dịch nói cái gì thì tôi khong thể bảo đảm). Sửa dấu phẩy thành chấm phẩy thì hết sai chỗ đó (còn sai chỗ nào nữa không thì toi khong biết)

    Chú thêm:
    Cách tính ngày trong năm của bạn như vậy quá rườm rà. Ngừoi ta chỉ đặt ra 2 mảng:
    int sn1[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
    int sn2[] = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
    int ** sn; // con trỏ vào mảng 1 hay 2 tùy theo có phải năm nhuần, tức là: sn = (năm nhuần)? &sn1: &sn2;

    Như vậy thứ tự ngày là: thutungay = ngay + (*sn)[thang-1];
    Để kiểm tra ngày có hợp lệ: (*sn)[thang-1] <= thutungay && thutungay <= (*sn)[thang]

    Nếu bạn không rành dùng con trỏ thì dùng mảng 2 chiều cũng được. Năm nhuần là 1, năm khong nhuần là 0.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Ai từng học qua Trình Biên Dịch, ai từng ngâm cú, nghiên cứu - tham gia viết trình biên dịch ?

    keyboard not found
    press f2 to continue

    Trên là ví dụ kinh điển về chuẩn đoán lỗi

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn mọi người rất nhiều. Mình nhận ra rồi
    Trích dẫn Gửi bởi Hien62Van8
    Một forum có đến 15 vạn thành viên, bàn chuyện syntax error

    Chưa biết bò đã lo học chạy.

    Bạn cho tôi biết bạn học trường nào, tôi sẽ giúp bạn ngay
    Rất xin lỗi bạn, mình cũng thấy đây là một lỗi hết sức cơ bản . Mình không học trường nào cả, mình tự học. Đây là một trong số những code đầu tiên của mình thôi, mình học theo sách bài tập của langman. Nhưng phải nói là lúc đấy mình đã nhìn đi nhìn lại mà vẫn không nhận ra là sai dấu, có thể lúc đấy mình hơi đãng trí chút, chứ cái này cũng không đến nỗi mình không biết.
    Trích dẫn Gửi bởi NguNhuheo
    for gồm có 3 lệnh, mỗi lệnh cách nhau bằng một dấu ";". Như sau:
    for (lệnh khởi dầu; lệnh điều kiện vào vòng; lệnh thực hiện sau mỗi vòng)

    Trong code của bạn có 3 biểu thức, cách nhau bằng dấu phẩy ",". Đối với C, dấu phẩy là toán tử cho nên 3 biểu thức trên được gộp lại thành 1 biểu thức kép và rốt lại chỉ là 1 lệnh.
    Có lẽ vì vậy mà trình dịch bảo là bạn thiếu ";" (mỗi trình dịch có báo lỗi khác nhau, tôi chỉ có thể cho bạn biết câu 41 của bạn sai chỗ nào thôi, còn việc trình dịch nói cái gì thì tôi khong thể bảo đảm). Sửa dấu phẩy thành chấm phẩy thì hết sai chỗ đó (còn sai chỗ nào nữa không thì toi khong biết)

    Chú thêm:
    Cách tính ngày trong năm của bạn như vậy quá rườm rà. Ngừoi ta chỉ đặt ra 2 mảng:
    int sn1[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
    int sn2[] = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
    int ** sn; // con trỏ vào mảng 1 hay 2 tùy theo có phải năm nhuần, tức là: sn = (năm nhuần)? &sn1: &sn2;

    Như vậy thứ tự ngày là: thutungay = ngay + (*sn)[thang-1];
    Để kiểm tra ngày có hợp lệ: (*sn)[thang-1] <= thutungay && thutungay <= (*sn)[thang]

    Nếu bạn không rành dùng con trỏ thì dùng mảng 2 chiều cũng được. Năm nhuần là 1, năm khong nhuần là 0.
    Mình có đọc qua về mấy cái bạn nói nhưng chưa rành lắm, với mình đang làm bài tập về for và if nên cố gẵng chỉ dùng if và for thôi. Dù sao cũng cảm ơn bạn nhiều.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tốt nhất bạn viết lại code đã sửa - nhận ra rồi.

    Như trên tôi có đề cập, lỗi nó báo - không chính xác như người - là lỗi tại thời điểm đó; sửa xong lỗi đó nó lòi lỗi khác.

    Lỗi syntax error là dễ, lỗi logic mới là thảm họa

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ^ Đây là code sau khi đã sửa của mình. Mình đã test và thấy khá ok. Cảm ơn bạn vì lời nhắc, công nhận là có lỗi logic thật.

    Mã:
    #include <stdio.h>#include <conio.h> void main(){    int j, i=0, d, m, y, bl=1, count;    printf("TINH SO THU TU NGAY TRONG NAM"    "
    Nhap vao ngay thang nam: ");    scanf("%d%d%d",&d, &m, &y);    //Kiem tra tinh hop le    if (y<0) bl=0;    else        if (y%4==0)            if (y%100!=0) i = 1;            else if (y%400==0) i = 1;        if (m==1||m==3||m==5||m==7||m==8||m==10||m==12)        {            if (d<0||d>31) bl=0;        }        else            if (m==4||m==6||m==9||m==11)            {                if (d<0||d>30) bl=0;            }            else                if (m==2&&i==0)                {                    if (d<0||d>28) bl=0;                }                else                    if (m==2&&i==1)                    {                        if (d<0||d>29) bl=0;                    }                    else bl=0;    if (bl==0) printf("Ban nhap ngay thang khong hop le.");    //Dem so ngay    else    {        count = d;        for (j=1;j<m;j++)        {            if (j==1||j==3||j==5||j==7||j==8||j==10||j==12) count+=31;            if (j==2) if(i==0) count+=28; else count+=29;            if (j==4||j==6||j==9||j==11) count+=30;        }        printf("Ngay %d thang %d la ngay thu %d trong nam %d",d,m,count,y);    }    getch();}

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1. Mình dùng C-Free, không hiểu ý bạn chỗ dùng TV có dấu lắm? Mình thấy các comment thuật toán người ta vẫn viết tiếng Việt không dấu mà. Với cái IDE này mình k gõ có dấu được.
    2. Mình chưa biết nên cmt thuật toán kiểu gì cho đúng, với code kia toàn if với for thì chẳng lẽ cũng lại giải thích ra ? Code này mình nghĩ chứ có phải thuật toán nào đâu. Cám ơn bạn vì lời nhắc, mình sẽ để ý vụ này.

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •