我有一个C程序,用户将在命令行中输入整数或双精度作为输入。允许负数,但是当用户输入这样的东西时,我遇到了问题:
1-1
它只是被解析为一个。我创建了一个函数来测试用户输入是否为有效数字,但我不确定如何捕获这样的实例,或者像 1+1、1)2 等输入也是如此。
这是我创建的函数:
int check_number(char *userInput) {
int i;
//check each character
for (i = 0; userInput[i] != ' '; i++){
if (isalpha(userInput[i])){
printf("Invalid input.n");
return -1;
}
}
return 0;
}
我应该怎么做才能在用户输入过程中不允许任何其他随机字符(除了字母,因为这些字符已经用 isalpha 进行了测试)?
基本上,
您希望第一个字符是减号或数字(也许是句点),所有后续字符都应该是数字或句点。但您可能还需要计算周期以确保只有一个。如果你也想接受科学记数法,你也需要处理这个问题。
检查不是 isalpha 是错误的方法,您应该检查允许的字符。
基本上是这样的:
if (*userInput != '-' && !isdigit(*userInput))
return -1;
int periods = 0;
while (*++userInput != 0) {
if (*userInput == '.') {
if (periods >= 1)
return -1;
++periods;
continue;
}
if (!isdigit(*userInput))
return -1;
}
return 0;
if (isdigit(userInput[i]) || userInput[i]=='.') {
printf("Valid input.n");
}
else return -1;