C语言问题,高手们帮我看看错在哪里

newxixi 2003-06-30 03:49:48
学习C语言,写一个10、2、8、16进制转换的小程序,用字符数组接受输入。现在的问题是:输入的校验问题,比如选择8进制输入。然后输入79,照样能执行……

代码如下,请高手们帮我看看错在哪里,谢谢!
#include "stdio.h"

char chInput[128],chOutPut[128];
int nData,nInChange,nOutChange;

int input();
void change();
int maybe(int);

int main()
{
for(int i=0;i<128;i++)
{
chInput[i]='\0';
chOutPut[i]='\0';
}
nInChange=10;
nOutChange=10;

input();
return 1;
}

int input() //输入格式、字符串
{
while(1)
{
do
{
printf("10:十进制\t2:二进制\t8:八进制\t16:十六进制\n");
printf("请选择输入格式(退出请输入0):");
scanf("%d",&nInChange);

if(nInChange==0)
return 0;
}
while(!(nInChange==10||nInChange==2||nInChange==8||nInChange==16));

switch(nInChange)
{
case 10:
do{
for(int i=0;i<128;i++)
chInput[i]='\0';

printf("请输入一个10进制的数:");
scanf("%s",chInput);
}while(maybe(10));
break;
case 2:
do{
for(int i=0;i<128;i++)
chInput[i]='\0';

printf("请输入一个2进制的数:");
scanf("%s",chInput);
}while(maybe(2));
break;
case 8:
do{
for(int i=0;i<128;i++)
chInput[i]='\0';

printf("请输入一个8进制的数:");
scanf("%s",chInput);
}while(maybe(8));
break;
case 16:
do{
for(int i=0;i<128;i++)
chInput[i]='\0';

printf("请输入一个16进制的数:");
scanf("%s",chInput);
}while(maybe(16));
break;
}

do
{
printf("10:十进制\t2:二进制\t8:八进制\t16:十六进制\n");
printf("请选择输出格式(退出请输入0):");
scanf("%d",&nOutChange);

if(nOutChange==0)
return 0;
}
while(!(nOutChange==10||nOutChange==2||nOutChange==8||nOutChange==16));

change();
}
return 1;
}

int maybe(int temp)
{
int i;
switch(temp)
{
case 10:
for(i=0;i<128;i++)
if(chInput[i]<='9'&&chInput[i]>='0')
return 0;
break;
case 2:
for(i=0;i<128;i++)
if(chInput[i]<='1'&&chInput[i]>='0')
return 0;
break;
case 8:
for(i=0;i<128;i++)
if(chInput[i]<='7'&&chInput[i]>='0')
return 0;
break;
case 16:
for(i=0;i<128;i++)
if(chInput[i]<='9'&&chInput[i]>='0'||
chInput[i]<='f'&&chInput[i]>='a'||
chInput[i]<='F'&&chInput[i]>='A')
return 0;
break;
}
return 1;
}

void change()
{
int i;
nData=0;

switch(nInChange) //将字符串转换为数值
{
case 10:
for(i=0;chInput[i]!='\0';i++)
nData=nData*10+(chInput[i]-48);
break;
case 2:
for(i=0;chInput[i]!='\0';i++)
nData=nData*2+(chInput[i]-48);
break;
case 8:
for(i=0;chInput[i]!='\0';i++)
nData=nData*8+(chInput[i]-48);
break;
case 16:
for(i=0;chInput[i]!='\0';i++)
nData=nData*16+(chInput[i]-48);
break;
}

for(i=0;i<128;i++)
chOutPut[i]='\0';

switch(nOutChange) //将数值转换为相应字符串
{
case 10:
for(i=0;nData!=0;i++)
{
chOutPut[i]=nData%10+48;
nData/=10;
}
break;
case 2:
for(i=0;nData!=0;i++)
{
chOutPut[i]=nData%2+48;
nData/=2;
}
break;
case 8:
for(i=0;nData!=0;i++)
{
chOutPut[i]=nData%8+48;
nData/=8;
}
break;
case 16:
for(i=0;nData!=0;i++)
{
if(nData%16<10)
chOutPut[i]=nData%16+48;
else
chOutPut[i]=nData%16+55;
nData/=16;
}
break;
}

printf("\n%s(%d进制)=",chInput,nInChange);
for(i=127;i>=0;i--)
{
if(!chOutPut[i]=='\0')
printf("%c",chOutPut[i]);
}
printf("(%d进制)\n\n",nOutChange);
}
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newxixi 2003-06-30
  • 打赏
  • 举报
回复
TO:arfi()
对不起,我输错了,您是对的,谢谢,谢谢,马上给您分,感谢感谢!
arfi 2003-06-30
  • 打赏
  • 举报
回复
那里不对,我运行国的
zxx42875922 2003-06-30
  • 打赏
  • 举报
回复
太长了 ,对不起!不好意思,下次吧
newxixi 2003-06-30
  • 打赏
  • 举报
回复
To: 回复人: arfi() ( )
你的方法好象也不对,搞得只能接受一位的输入了。
newxixi 2003-06-30
  • 打赏
  • 举报
回复
To: doer_ljy(可战)
照你的方法执行了,并没有解决问题
arfi 2003-06-30
  • 打赏
  • 举报
回复
int maybe(int temp)
{
int i;

switch(temp)
{
case 10:
for(i=0; chInput[i]&&i<128; i++)
if(chInput[i]>'9' || chInput[i]<'0')
return 1;
break;
case 2:
for(i=0; chInput[i]&&i<128; i++)
if(chInput[i] > '1' || chInput[i]<'0')
return 1;
break;
case 8:
for(i=0; chInput[i]&&i<128; i++)
if(chInput[i] > '7' || chInput[i]<'0')
return 1;
break;
case 16:
for(i=0; chInput[i]&&i<128; i++)
if(chInput[i]<'0' || \
(chInput[i]>'9' && chInput[i]<'A') || \
(chInput[i]>'Z' && chInput[i]<'a') || \
chInput[i]>'z')
return 1;
break;
}

return 0;
}
星之瀚海 2003-06-30
  • 打赏
  • 举报
回复
太长,没时间看,帮你顶
doer_ljy 2003-06-30
  • 打赏
  • 举报
回复
举个例子吧
for(i=0;i<128;i++)
if(chInput[i]<='7'&&chInput[i]>='0')
return 0;
这一段,如果你想用户输入不合法就返回一个0的话
应该改成
for(i=0;i<128;i++)
if(chInput[i]>='7'||chInput[i]<='0')
return 0;
否则的话,你return 0就没道理了。
因为,一个满足条件的输入(比如79中的7)就返回了。"9"就没有被判断!

70,036

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧