永发信息网

一个C程序的问题

答案:2  悬赏:50  手机版
解决时间 2021-04-22 15:40
  • 提问者网友:蓝莓格格巫
  • 2021-04-22 02:29

一个任意进制向十进制转化程序的问题

代码如下:

#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= 这是为什么?应该怎么改?

下面是截图

最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-04-22 03:36
这个是由于你使用了gets的原因,gets和scanf的区别在于,gets在取字符的时候遇到结束符结束,但是不读入结束符,结束符还留在缓冲区中,下次再使用的时候下一个gets在缓冲区中一开始就遇到一个结束符,所以就什么也没有读到,而scanf是把结束符也读取进来,不留在缓冲区中,使用自身的过滤提取出需要的字符
全部回答
  • 1楼网友:污到你湿
  • 2021-04-22 04:57

//已改好

#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); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯