LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 515|回复: 1

向int变量输入非数字值引起的问题

[复制链接]
发表于 2004-6-8 14:11:20 | 显示全部楼层 |阅读模式
本人在编写一个猜数字的小程序,希望能限制值输入,使之只能接受数值而不是其他输入值,但在过程中发觉若输入a或其他非数字值会令程序进入死循环状态,请问如何能让程序辨认出非法输入的值,为何会进入死循环状态?现发现若向int变量输入0~9以外的值,每次都会输出一个随机数,特向各位请

源程序:

#include <stdio.h>
#include <stdlib.h>

main()
{
int input[4],rand[4]; /*input[4]数组存入输入的4位数,rand[4]存入生成的4位随机数
int number,rand_number;
int i,j;
int Atime,Btime;

i = j = Atime = Btime = 0;
rand_number = randnum();
printf("\n ****%d**** \n",rand_number);
number_convert(rand_number,rand);
while(number_check(rand) == 0) /*检查生成随机数的有效性
{
rand_number = randnum();
printf("\n ****%d**** \n",rand_number);
number_convert(rand_number,rand);
}
for(;Atime!=4;)
{
Atime = Btime =0;
number = numinput();
number_convert(number,input);
while (number_check(input) == 0) /*检查输入数的有效性
{
printf("Input error please try again!\n");
number = numinput();
number_convert(number,input);
}
for(i=3;i>=0;i--)
{
if(input == rand) /*同位比较,相同Atime自加1
Atime++;

for(;j<=3;j++) /*不同位比较,相同Btime自加1
if(i != j && rand == input[j])
Btime++;

j = 0;
}
printf("%dA",Atime);
printf("%dB",Btime);
}
}

number_convert(int fill,int *id) /* 把输入数和随机数分解为四个1位数,存入相应数组
{
int i,divide;
divide = 1000;

for(i=3;i>=0;i--)
{
*(id+i) = fill/divide;
fill = fill%divide;
divide = divide/10;
}
}

numinput()
{
int number;
printf("\nplease input 4bit number\n");
scanf("%d",&number);
return number;
}


number_check(int *check)
{
int i,j;
for(i=0;i<=3;i++)
{
if(*(check+i) > 9 || *(check+i) < 0)
return 0;
for(j=0;j<=3;j++)
{
if(i != j && *(check+i) == *(check+j))
{
return 0;
}
}
if(i == 4 && j == 4)
return 1;
}
}

#include <stdlib.h>
randnum()
{
int rand_number;
randomize();
rand_number = random(9999);
return rand_number;
}

number_convert函数把输入数和随机数分为4位存入相应数组
number_check函数对输入数和随机数的有效性进行检查,位数不重复,不大于或小于4位
numinput函数进行输入工作
randnum函数生成随机数
发表于 2004-6-8 20:53:41 | 显示全部楼层
isdigit()函数可以判断一个字符是否是数字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表