scanf("%c",&a)读入字符时,'\n'被留在输入缓冲区,下次再读入a时,会将这个'\n'读入,这个'\n'既不是'y'或'Y',也不是'n'或'N',这就是执行两次
else {flag = 0
世洞 雀返派 printf("您的输入有误!请重新输入!\n")
}
的原因。
既然你提到了健壮性,我顷贺建议你将键盘回答的内容读到足够长的char数组中,如char a[15],用系统函数fgets(a,15,stdin)读入a,紧跟着一句fflush(stdin)然后根据第一个字符,进行处理即可。
用字符串接收输入的值,然后一个瞎戚字符一个字符的判断是否是"1"-"9"或者是"."(单价之类的可以是小数),还有就是判断第一个字符是否是数字,最多只能有一个"."之类的都可以用这个办法bool IsNumber(char cNumber[200])
{
char achar
int nIndex
int nPCount
nIndex = 0
achar = cNumber[nIndex]
nPCount = 0
while (achar != 0)
{
//不考虑有负数
if (achar<'0' || achar>'9')
{
if (achar != '.')
{
return false
}
else
{
nPCount++
if (nPCount >1)
{
return false
}
}
}
nIndex++
achar = cNumber[nIndex]
}
return true
}
void main()
{
char cNumber[200]
double dValue
printf("输入一个数字:")
scanf("%s",&cNumber)
while (!IsNumber(cNumber))
{
printf("非法数字,请重梁并新橡神迹输入:")
scanf("%s",&cNumber)
}
dValue = atof(cNumber)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)