16转10禁止的函数那里错了?

来源:百度知道 编辑:UC知道 时间:2024/06/16 09:13:09
#include<stdio.h>
main()
{int zhuanhuan(char []);
int i=0,flag=0,flag1=1;
char a[100],c,k;
printf("请输入一个16禁止的数");
for(c=getchar();c!='\n'&&flag1==1;)
{if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{a[i]=c;flag=1;i++;}
else if(flag)
{a[i]='\0';
flag=0;
printf("转换结果%d\n",zhuanhuan(a));
printf("还转换么(y/n)?");
k=getchar();
if(k=='n'||k=='N')
flag1=0;
else{flag=0;i=0;}
}
}
}
int zhuanhuan(char a[])
{int c,s=0;
for(c=0;a[c]!='\0';c++)
{if (a[c]>='0'&&a[c]<='9')
s=s*16+a[c]-'0';
if (a[c]>='a'&&a[c]<='f')
s=s*16+a[c]-'a'+10;
if (a[c]>='A'&&a[c]<='F')
s=s*16+a[c]-&

你找不出问题出在哪里,完全是由于你糟糕的编码风格造成的,
你的if/else嵌套的逻辑完全是混乱的,
下面已经给你改好了,

#include<stdio.h>

void main()
{
int zhuanhuan(char []);
int i=0,flag=0,flag1=1;
char a[100],c,k;
do
{
printf("\n请输入一个16进制的数\n");
fflush(stdin);
for(c=getchar();c!='\n'&&flag1==1;)
{
if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{
a[i]=c;
c=getchar();
flag=1;
i++;
}
}
if(flag)
{
a[i]='\0';
flag=0;
printf("转换结果: %d\n",zhuanhuan(a));
}

printf("\n还转换么(y/n)?");
fflush(stdin);
k=getchar();

if(k=='n'||k=='N')
{
flag1=0;
break;
}
else
{
flag=0;
i=0;
}
}while(k=='y'||k=='Y');

}