C语言问题,高手们帮我看看错在哪里
学习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);
}