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

Đề tài: nhờ các anh em test giùm đoạn code này xem còn lỗi nào phát sinh ngoài ý muốn ko.

  1. #1
    Ngày gia nhập
    08 2012
    Bài viết
    71

    Mặc định nhờ các anh em test giùm đoạn code này xem còn lỗi nào phát sinh ngoài ý muốn ko.

    Cái title quá dài, nhưng ko biết đặt thế nào cho ngắn gọn và dễ hiểu hết ^-^
    Dưới đây là đoạn code mình viết, yêu cầu người nhập vào phải nhập số. Sẽ ko chấp nhận bất cứ 1 lỗi này xảy ra trong mọi trường hợp. Nghĩa là nó yêu cầu nhập lại .. nhập lại miết cho tới khi nhập vào là số thì thôi. Mong các bác test giùm xem còn lỗi nào mình chưa xử lý ko. Thanks nhiều !!!
    C Code:
    1. /****************************************************************************/
    2. /*     プログラム名 : 基本課題1-8                                           */
    3. /*     プログラムID : kadai1-8                                              */
    4. /*--------------------------------------------------------------------------*/
    5.  
    6. /*     変更日 : 2012年09月13日                                              */
    7. /*     変更内容 : コメント・ヘッダ入れる  & 入力処理                                   */
    8. /****************************************************************************/
    9. #include <stdio.h>
    10. #include <stdlib.h>
    11. #include <conio.h>
    12. #include <string.h>
    13. #include <ctype.h>
    14.  
    15. void nhap(char s[128], int dodai);
    16. void kiemtra(char s[128]);
    17. int ilengis2(char s[128]);
    18.  
    19. void main()
    20. {
    21.     float hienthi;
    22.     /****************************************************/
    23.     /*  dem : 最初の値と入力した値をカウントするの値。  */
    24.     /****************************************************/
    25.     char s[129];
    26.  
    27.     printf("Input value from -9999 to 9999\n\n");
    28.     printf("input : ");
    29.     nhap(s, 128);
    30.     hienthi=atof(s);
    31.  
    32.     if((hienthi > 9999) || (hienthi < -9999))
    33.     {
    34.         printf("--- not in -9999 ---> 9999. But that is number\n ---\n");
    35.     }
    36.     else
    37.     {
    38.         printf("Your input is NUMBER in -9999 to 9999\n");
    39.         printf("hienthi = %f\n", hienthi);
    40.     }
    41.     printf("--- Press enter key to exit ---\n");
    42.     getchar();
    43. }
    44.  
    45. /****** INPUT PROCESS ********/
    46. void nhap(char s[128], int dodai)
    47. {
    48.     /*****************************************************/
    49.     /*    Win 64bitにCMDで127以上の文字入力可能ので、 */
    50.     /*  このFUNCTIONを呼び出すとき、必ず127以下を使用する*/
    51.     /*****************************************************/
    52.     int cnt=0,i;
    53.     while((i=getchar()) != '\n')
    54.     {
    55.         if(cnt < dodai)
    56.         {
    57.             s[cnt]=i;
    58.             cnt++;
    59.         }
    60.     }
    61.     s[cnt++]='\0';
    62.    
    63.     kiemtra(s);
    64. }
    65.  
    66. void kiemtra(char s[128])
    67. {
    68.     int i_error=0; /* 0 is ok, 1 is re-input */
    69.     int ileng;
    70.     int dotto=0, mainasu=0, moji=0, cnt=0;
    71.  
    72.     ileng=strlen(s);
    73.  
    74.     if(ileng == 0)
    75.     {
    76.         printf("未入力。\n");
    77.         i_error=1;
    78.     }
    79.     else if(ileng > 127)
    80.     {
    81.         printf("入力オーバー\n");
    82.         i_error=1;
    83.     }
    84.     else if(ileng == 1)
    85.     {
    86.         if(!isdigit(s[0]))
    87.         {
    88.             printf("文字はダメです。\n");
    89.             i_error=1;
    90.         }
    91.     }
    92.     else if(ileng == 2)
    93.     {
    94.         i_error=ilengis2(s);
    95.     }
    96.     else /* total char from 3 -> 127 */
    97.     {
    98.         i_error=ilengis2(s);
    99.         if(i_error != 1)
    100.         {
    101.             for(cnt=0; cnt<ileng; cnt++)
    102.             {
    103.                 if((s[cnt] != '.') && (s[cnt] != '-') && (!isdigit(s[cnt])))
    104.                 {
    105.                     printf("文字はダメです。\n");
    106.                     i_error=1;
    107.                     break;
    108.                 }
    109.  
    110.                 /* dotto count */
    111.                 if(s[cnt] == '.')
    112.                 {
    113.                     dotto++;
    114.                 }
    115.                 if(dotto > 1)
    116.                 {
    117.                     printf("「.」は2つ以上の場合、不明の数字です。\n");
    118.                     i_error=1;
    119.                     break;
    120.                 }
    121.  
    122.                 /* 「-」place check */
    123.                 if((s[cnt] == '-') && (cnt != 0))
    124.                 {
    125.                     printf("「-」の位置が間違っています。\n");
    126.                     i_error=1;
    127.                     break;
    128.                 }
    129.             }
    130.         }
    131.     }
    132.  
    133.     if(i_error == 1)
    134.     {
    135.         printf("数字再入力 : ");
    136.         nhap(s, 128);
    137.     }
    138.  
    139. }
    140.  
    141. int ilengis2(char s[128])
    142. {
    143.     int i_error; /* return value. 0 is ok, 1 is re-input*/
    144.     int dotto=0, mainasu=0;
    145.     if(s[0] == '.')
    146.         {
    147.             dotto=1;
    148.         }
    149.         else if(s[0] == '-')
    150.         {
    151.             mainasu=1;
    152.         }
    153.         else if(!isdigit(s[0]))
    154.         {
    155.             printf("文字はダメです。\n");
    156.             i_error=1;
    157.         }
    158.         if((dotto > 0) || (mainasu > 0))
    159.         {
    160.             /* the second character is not number */
    161.             if(!isdigit(s[1]))
    162.             {
    163.                 printf("入力したのは数字ではない。\n");
    164.                 i_error=1;
    165.             }
    166.         }
    167.         else if(!isdigit(s[1]))
    168.         {
    169.             if((mainasu > 0) || (dotto > 0))
    170.             {
    171.                 printf("入力したのは数字ではない。\n");
    172.                 i_error=1;
    173.             }
    174.             else if(i_error != 1)
    175.             {
    176.                 if((dotto == 0) && (s[1] != '.' ))
    177.                 {
    178.                     printf("文字はダメです。\n");
    179.                     i_error=1;
    180.                 }
    181.             }
    182.         }  
    183.         return i_error;
    184. }
    Trước khi là PRO thì chắc chắn sẽ là CON GÀ
    Và mình thì đang ở mức độ CON GÀ

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Sao mình test trên visual C++ 2010 nó báo lỗi runtime biến i_error bạn à. Mình đang tìm mà chưa thấy cái sai khi chạy này. để mình tìm lại xem
    Nếu là nhập toàn số thôi thì mình sẽ nhập cả xâu rồi hàm kiểm tra như thế này bạn xem thế nào
    C Code:
    1. int KiemTra(char *a)
    2. {
    3.     for(int i=0;a[i]!='\0';++i)
    4.         if(a[i]<48||a[i]>57)
    5.           return 0;//khong thoa man nhap toan la so
    6.     return 1;//Thoa man
    7. }
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  3. #3
    Ngày gia nhập
    08 2012
    Bài viết
    71

    hix ..... nếu chỉ nhập toàn là số và câu thông báo chỉ là "ko phải số" thì đơn giản rồi.
    Đằng này nó yêu cầu :
    nếu nhập vào : 1..2 ---> ko có số thập phân nào có 2 dấu chấm.
    nếu nhập vào : -.3 ---> số nhập ko rõ ràng.
    nếu nhập vào : -122222-3 ----> dấu - nằm sai chỗ
    ................
    đấy, cái khó chịu của nó nằm ở chỗ đấy :(
    Còn chạy trên VS2010 thì chịu, mình đang chạy trên VS2005.
    Trước khi là PRO thì chắc chắn sẽ là CON GÀ
    Và mình thì đang ở mức độ CON GÀ

  4. #4
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Trích dẫn Nguyên bản được gửi bởi shizuoka Xem bài viết
    hix ..... nếu chỉ nhập toàn là số và câu thông báo chỉ là "ko phải số" thì đơn giản rồi.
    Đằng này nó yêu cầu :
    nếu nhập vào : 1..2 ---> ko có số thập phân nào có 2 dấu chấm.
    nếu nhập vào : -.3 ---> số nhập ko rõ ràng.
    nếu nhập vào : -122222-3 ----> dấu - nằm sai chỗ
    ................
    đấy, cái khó chịu của nó nằm ở chỗ đấy :(
    Còn chạy trên VS2010 thì chịu, mình đang chạy trên VS2005.
    Giờ bạn nói thể này mình hiểu rồi, nó gần giống như một bài kiểm tra ngữ pháp dấm chấm câu rồi phảy gì đó đúng không.... Bắt đầu phức tap.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  5. #5
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Trích dẫn Nguyên bản được gửi bởi shizuoka Xem bài viết
    Cái title quá dài, nhưng ko biết đặt thế nào cho ngắn gọn và dễ hiểu hết ^-^
    Dưới đây là đoạn code mình viết, yêu cầu người nhập vào phải nhập số. Sẽ ko chấp nhận bất cứ 1 lỗi này xảy ra trong mọi trường hợp. Nghĩa là nó yêu cầu nhập lại .. nhập lại miết cho tới khi nhập vào là số thì thôi. Mong các bác test giùm xem còn lỗi nào mình chưa xử lý ko. Thanks nhiều !!!
    Chẹp, coding-style vẫn tệ như xưa. Tên biến thì đặt lung tung, 2-3 ngôn ngữ, Việt-Anh-Nhật. :|. Post đầy đủ yêu cầu của đề xem (tiếng Việt) tôi xem thử có cách nào code tốt hơn không.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  6. #6
    Ngày gia nhập
    08 2012
    Bài viết
    71

    Mặc định nhờ các anh em test giùm đoạn code này xem còn lỗi nào phát sinh ngoài ý muốn ko.

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Chẹp, coding-style vẫn tệ như xưa. Tên biến thì đặt lung tung, 2-3 ngôn ngữ, Việt-Anh-Nhật. :|. Post đầy đủ yêu cầu của đề xem (tiếng Việt) tôi xem thử có cách nào code tốt hơn không.
    đề : nhập vào 2 số, xuất ra màn hình kết quả cộng trừ nhân chia ở 3 kiểu dữ liệu : int - float - double và 2 toán tử : AND OR của 2 số đó.
    Điều kiện :
    1/ khi nhập sai dữ liệu, sẽ xuất ra thông báo dữ liệu đó sai cái gì và yêu cầu nhập lại.
    2/ Trong mọi trường hợp, ko được xảy ra lỗi over load của bất kỳ biến nào.

    Viết lệnh nhập bằng SCANF ( đề x-1 ) và lệnh nhập bằng GETCHAR ( đề x-2 ).
    ---------------------------------------------------------------------------
    Còn cái style thì tạm thời phải chấp nhận thôi Viết tiếng Việt mấy bố ko hiểu, hỏi nhiều quá. Có vài biến làm đi làm lại nên giờ mấy bố thuộc lòng mấy chữ đó rồi. Vốn tiếng anh thì chỉ còn vài ba từ máng lại trong đầu, mà chữ đó đem phang ra tiếng Nhật nó dài ngoằn nên để luôn tiếng Anh )
    Trước khi là PRO thì chắc chắn sẽ là CON GÀ
    Và mình thì đang ở mức độ CON GÀ

  7. #7
    Ngày gia nhập
    08 2012
    Bài viết
    71

    có bác nào thấy lỗi nào khác ko ??? mình đã liệt kê ra những trường hợp có thể nhập vào như sau :
    1/ -.
    2/ .-
    3/ ..3
    4/ -3.3333.3
    5/ a--
    6/ a.564
    7/ .a90
    8/ -a.3333
    9/ -3.33a.333
    10/ -.333
    11/ .333333-2
    12/ ko nhập
    13/ nhập vào quá 127 ký tự

    hix .......... có thể nhập vào như thế nào nữa nhỉ ???
    Trước khi là PRO thì chắc chắn sẽ là CON GÀ
    Và mình thì đang ở mức độ CON GÀ

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

  1. Lập trình C cần pro giúp test với viết hàm switch giùm cái, thứ 2 tuần sau nộp mà ko làm dc
    Gửi bởi huan_bkak55 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 26-09-2012, 12:10 AM
  2. code nhập xuất học sinh trong c-free thì chạy dc ,còn trong visual thì ko
    Gửi bởi art_mu trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 08-02-2012, 10:37 PM
  3. Code quản lý sinh viên. Kiểm tra giùm mình.
    Gửi bởi NamIT trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 7
    Bài viết cuối: 15-09-2011, 02:53 PM
  4. Mọi người sửa giùm em cái code bài quản lý sinh viên này với.
    Gửi bởi NamIT trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 10-09-2011, 12:36 PM
  5. còn cách nào khác ngoài Timer?? help..
    Gửi bởi gabygabby trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 21-03-2009, 12:05 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