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!!!