69,374
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#define HEX 16
int htoi(char s[]);
main()
{
int i,a;
char c,s[20];
for(i = 0;i < 20 && (c = getchar())!= '\n'; ++i)
s[i] = c;
if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')){
a = htoi(s);
printf("The number is %d.\n",a);
}
else printf("Error!");
return 0;
}
int htoi(char s[])
{
int i = 2;
int n = 0;
while(s[i] != '\0' && s[i] != '\n'){
if(s[i] >= '0' && s[i] <= '9'){
n = n * HEX + (s[i] - '0');
++i;}
else if(s[i] >= 'a' && s[i] <= 'f'){
n = n * HEX + (s[i] - 'a' + 10);
++i;}
else if(s[i] >= 'A' && s[i] <= 'F'){
n = n * HEX + (s[i] - 'A' + 10);
++i;}
}
return n;
}
int htoi(char s[])
{
int i = 2;
int n = 0;
while(s[i] != '\0' && s[i] != '\n'){
if(s[i] >= '0' && s[i] <= '9')
n = n * HEX + (s[i] - '0');
else if(s[i] >= 'a' && s[i] <= 'f')
n = n * HEX + (s[i] - 'a' + 10);
else if(s[i] >= 'A' && s[i] <= 'F')
n = n * HEX + (s[i] - 'A' + 10);
++i;
}
return n;
}
#include<stdio.h>
#define HEX 16
int htoi(char s[]);
main()
{
int i,a;
int c; // getchar()返回int
char s[20] = { '\0' }; // 初始化,如果不初始化的话,数组里面含有随机值,按照你的第一方式,如果随机值不是0-9,a-f,A-F,变量i根本不会自增,所以无限是=循环;你的第二方式即使判断不成立也会自增
for(i = 0;i < 20 && (c = getchar())!= '\n'; ++i)
s[i] = c;
if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')){
a = htoi(s);
printf("The number is %d.\n",a);
}
else printf("Error!");
return 0;
}
int htoi(char s[])
{
int i = 2;
int n = 0;
while(s[i] != '\0' && s[i] != '\n'){
if(s[i] >= '0' && s[i] <= '9'){
n = n * HEX + (s[i] - '0');
++i;}
else if(s[i] >= 'a' && s[i] <= 'f'){
n = n * HEX + (s[i] - 'a' + 10);
++i;}
else if(s[i] >= 'A' && s[i] <= 'F'){
n = n * HEX + (s[i] - 'A' + 10);
++i;}
}
return n;
}