一个任意进制向十进制转化程序的问题
代码如下:
#include <stdio.h>
#include <string.h>
int cheng(int a,int b)
{
int i,s;
s=1;
for(i=b;i>0;i--)
s=s*a;
return(s);
}
void main()
{
A: char a[100];
int p,k,x,y,n,l,t;
printf("输入一个n进制数字x\n");
printf("x=");
gets(a);
printf("n=");
scanf("%d",&n);
y=strlen(a)-1;
p=0;
for(l=0;l<y+1;l++)
{
t=a[l]-'0';
if(t>=n||t<0)
{printf("您所输入的数字非%d进制\n",n);
printf("---------------------------\n");
goto A;}
}
for(k=0;k<y+1;k++)
p=p+(a[k]-'0')*cheng(n,y-k);
printf("转换结果为%d\n",p);
}
问题在于goto A 这一句 当程序判断输入数字有误时返回重新执行
例如:我输入x=1210 n=2 时 程序返回执行 却成了 x=n= 这是为什么?应该怎么改?
下面是截图
这个是由于你使用了gets的原因,gets和scanf的区别在于,gets在取字符的时候遇到结束符结束,但是不读入结束符,结束符还留在缓冲区中,下次再使用的时候下一个gets在缓冲区中一开始就遇到一个结束符,所以就什么也没有读到,而scanf是把结束符也读取进来,不留在缓冲区中,使用自身的过滤提取出需要的字符
//已改好
#include <stdio.h>
#include <string.h>
int cheng(int a,int b)
{
int i,s;
s=1;
for(i=b;i>0;i--)
s=s*a;
return(s);
}
void main()
{
char a[100];
int p,k,x,y,n,l,t;
A: printf("输入一个n进制数字x\n");
printf("x=");
fflush(stdin);
gets(a);
printf("n=");
scanf("%d",&n);
y=strlen(a)-1;
p=0;
for(l=0;l<y+1;l++)
{
t=a[l]-'0';
if(t>=n||t<0)
{printf("您所输入的数字非%d进制\n",n);
printf("---------------------------\n");
goto A;}
}
for(k=0;k<y+1;k++)
p=p+(a[k]-'0')*cheng(n,y-k);
printf("转换结果为%d\n",p);
}
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息