문자열을 가져 와서 십진수/부동/8 진수/16 진수로 변환 할 수 있는지 확인하려고합니다.일부 경우 문자열을 10 진수로 변환합니까?
이 문자열을 배열에 저장하고이를 반복하여 어떤 요소인지 확인했습니다.
for(int k=0;k<i;k++){
char* string = tokenArray[k];
fprintf(newFile, "Tokens are: %s\n", string);
if(checkDecimal(string) == 1){
result[k] = "Decimal"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkFloat(string) == 1){
result[k] = "Float"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkHex(string) == 1){
result[k] = "Hex"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkOctal(string) == 1){
result[k] = "Octal"; printf("Token: %s is %s\n", string, result[k]);
}
else {
printf("Token: %s Did not work\n", string);
}
내가이며, 별도의 파일로 내 배열의 내용을 썼다 :
fprintf(newFile, "Tokens are: %s\n", string);
토큰은 다음과 같습니다 012
토큰은 다음과 같습니다 : 23,948
토큰은 다음과 같습니다 1.21e + 19
토큰 : [
토큰은 :
토큰은 0
토큰은 : 0x56
토큰은 : 888
토큰은 : 0x11을
토큰은 12
토큰은 다음과 같습니다. 333
토큰은 다음과 같습니다 (234)
토큰은 다음과 같습니다 012
토큰은 다음과 같습니다 12
토큰은 다음과 같습니다 : 01,200
당신은 내가 올바르게 토큰을 얻고있다,하지만 내 출력이 다가오고 볼 수 있듯이 기묘한.
이
가 출력 나는이 기능을 잘 생각int checkFloat(char *s){
char *str = NULL;
long i = strtol(s, &str, 0);
if (!*str)
return 0;
if (*str == 'e' || *str == 'E' || *str == '.')
return 1;
return 0;
}
int checkHex(char *s){
char *str = s;
if((*str) == '0'){
if((*(str++) == 'x')){
printf("%s\n", "olala");
}
}
if(*(str) == 0 && (*(str++) == 'x' || *(str++) == 'X'))
{
printf("%s\n", "ok");
while(*(str) != '\0')
{
if (!isxdigit(*str))
{
return 0;
}
++str;
}
return 1;
}
return 0;
}
int checkOctal(char *s){
char *str = s;
if (*str != '0')
{
return 0;
}
while (isdigit(*str) && *str != '8' && *str != '9')
{
if(*(++str) == '\0')
{
return 1;
}
str++;
}
return 0;
}
int checkDecimal(char *s){
char *str = s;
if(*str == '0')
return 0;
for(int i=0;i<strlen(str);i++){
if(str[i] < 49 || str[i] > 57)
return 0;
}
return 1;
}
, :
이 검사 요소에 대한 내 코드입니다
토큰 : 012 진수
입니다토큰 : 23948은 10 진수입니다.
토큰 : 1입니다.[이
토큰을 작동하지 않았다 : 21E + 19 는
토큰을 플로트입니다
이토큰 작동하지 않았다 : 0 진수
입니다토큰 : 0x56 작동하지 않았다
토큰 : 888은 10 진수입니다.
토큰 : 0X11
,363,210토큰 : 12 진수입니다
토큰 : (333) 진수입니다
토큰 : 234 작동하지 않았다
토큰 : 012 작동하지 않았다
토큰 : 12 진수
입니다토큰 : 01200은 8 진수입니다.
As 당신은 볼 수 있습니다, 첫 번째 토큰은 옥타브 (벌금)로 나온 012였습니다. 같은 012를 가진 또 다른 토큰이 오류로 나타났습니다. "234"와 동일합니다.
필자는 왜 내 육면체 주입량이 작동하는지 알지 못합니다.
Plz은 도움말
먼저 디버거를 사용하는 방법을 배우십시오. – OldProgrammer
나는 코드를 디버깅하지 않을 것이지만, 그렇게 할 수 있고 어떤 일이 일어날 지 알 수있다. 당신은 아마 오류를 발견 할 것이다. 동일한 숫자가 같은 결과를 내지 않는다면, 아마도 새로운 라인마다 읽기 포인터를 다시 초기화하지 않을 것입니다. 0x12가 작동하지 않는다면 아마 포인터가 앞으로 올라와 있지 않을 것입니다. 그것이 이루어져서는 안되는 곳으로 나아 간다. 그러나 당신은 혼자서 알아야 할 것입니다, IMO. 좋은 디버거를 사용하십시오. –
참고 : 16 진수 코드는 복잡한 코드입니다. 먼저 '0x'또는 '0X'를 확인한 다음 나머지를 확인하십시오. '0! ='0 ''이나 '0 =='\ 0 ''에주의하십시오. –