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

Đề tài: [C]Các bạn giải thích hộ mình với!

  1. #1
    Ngày gia nhập
    11 2006
    Bài viết
    6

    Mặc định [C]Các bạn giải thích hộ mình với!

    Bài toán mình định làm là: chuyển đổi giữa các hệ số 2,8,10,16
    Dưới đây là phần mình kiểm tra số nhập vào
    Ý tưởng: nhập số cần chuyển dưới dạng chuỗi ký tự lưu vào
    input_char
    Rồi kiểm tra số vừa nhập dựa vào hệ số he_so:
    vd: hệ số 2 thì các ký tự phải là '0' và '1'

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <ctype.h>
    
    void main()
    {
    	char *input_char;
    	int so_cs_max;
         	int kt;
    	int he_so;
    	/* khai bao nguyen mau cac ham*/
    	int kiem_tra(char *input, int hs);
    label1: printf("\nchieu dai toi da cua so can chuyen?");
    	scanf("%d",so_cs_max);
    	input_char = (char*)malloc(so_cs_max*sizeof(char));
    	printf("\nhe so cua so ban can chuyen la (2,8,10,16):");
    	scanf("%d",&he_so);
            printf("\nban hay nhap so can chuyen doi:");
    	fflush(stdin);
    	scanf("%s", input_char);
    	kt = kiem_tra(input_char, he_so);
         	if (kt == 0)
         	{
    		printf("\nban da nhap khong chinh xac--> nhap lai");
    		goto label1;
       	}
              
    
    }
          /* --------------CAC HAM--------------------------*/
    kiem_tra(char *input, int hs)
    {
    	int j;
            int i = strlen(input) ;
    	switch (hs)
    	{
    	   case 2:
    		for (j=0; j<i; j++)
    		{
    			if ((input[j]!='0') && (input[j]!='1'))
    				{
    					return 0;                                
    				}		
    		}
                    return 1;
    		break;
    	    case 10:
                    for (j =0; j<i; j++)
    		    {
    			    if ( isdigit(input_char[j]) ==0)
    			    {
                          	return 0;
    			    }
    
    		    }
    		    return 1;
    		    break;
    		/*case 8:
                ....
    		case 16:
                ....
    		default:
    			printf("ban phai chon 1 trong cac he so2,8,10,16") */ 
    
    			
    	}  
    
    }
    Nếu chỉ chạy đến phần break của case 2 thì không có lỗi. Khi mình thêm đoạn:
    Code:
                   case 10:
                        for (j =0; j<i; j++)
    		    {
    			    if ( isdigit(input_char[j]) ==0)
    			    {
                          	          return 0;
    			    }
    
    		    }
    		    return 1;
    		    break;
    thì báo lỗi. Các bạn xem hộ tớ cái. Thanks!!!

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Lôi input_char vào thì error là đúng rồi mà bạn. . Sửa thành input[j] == 0
    None!

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    6

    Buồn cười thật bạn nhỉ.
    Có những cái tưởng rất đơn giản mà không nhìn ra. Tìm cả buổi mà chẳng ra.
    Cảm ơn và xin lỗi các bạn!!!

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    121

    không có gì đâu singO2 vì lập trình viên rất khó tìm thấy lỗi của mình mà, chính vì vậy cần có thêm một tester. hi hi!
    Diễn đàn rất vui lòng giúp đỡ bạn.

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Mình đã từng làm 1 bài chuyển đổi giữa các hệ số từ 2 đến 16, ý tưởng của mình là chuyển hệ bát kỳ về hệ 10 và từ hệ 10 chuyển sang hệ bất kỳ.
    Chuyển từ hệ 10 sang hệ bất kỳ: chia liên tiếp cho hệ số rồi lấy số dư theo thứ tự ngược lại, có thể dùng stack hoặc là đệ quy.
    Chuyển từ hệ bất kỳ sang hệ 10: lấy trị số * (hệ số ^ trị vị trí), ví dụ con số 1011 có các trị số lần lượt là 1 1 0 1 ứng với các trị vị trí lần lượt là 0 1 2 3 (đếm từ phải sang trái).
    Còn về phần kiểm tra số nhập vào thì theo mình sẽ kiểm tra từng ký số, giả sử ở hệ 8 thì sẽ ko cho người dùng nhập vào ký số > 7. Việc kiểm soát chương trình của mình sẽ an toàn hơn nhưng mà viết khó lắm, lúc trước mình dùng pascal viết nên thấy ok, sau này chuyển sang C++ thì thiếu 1 số hàm đặc trưng của pascal nên bài này khó viết. Ý tưởng là như thế này, kiểm tra từng phím nhập vào (readkey), nếu thỏa điều kiện thì xuất ra màn hình và cất vào trong mảng ký số.
    Hy vọng ý tưởng của mình giúp ích được cho bạn để làm 1 bài hoàn chỉnh hơn ^.^

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

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 06-08-2012, 07:01 PM
  4. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  5. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 PM

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