0

我有一个 C 程序,用户将在命令行中输入整数或双精度数作为输入。允许使用负数,但我遇到了用户输入以下内容时的问题:

1-1

它只是被解析为一个。我创建了一个函数来测试用户输入是否为有效数字,但我不确定如何捕获这样的实例,或者对于 1+1、1)2 等输入也是如此。

这是我创建的函数:

int check_number(char *userInput) {
int i;
//check each character
for (i = 0; userInput[i] != '\0'; i++){
    if (isalpha(userInput[i])){
        printf("Invalid input.\n");
        return -1;
    }
}       
return 0;
}

我应该怎么做才能在用户输入中间不允许任何其他随机字符(除了字母,因为那些已经用 isalpha 测试过)?

4

2 回答 2

2

基本上,您希望第一个字符是减号或数字(可能还有句点),所有后续字符都应该是数字或句点。但是您可能还需要计算周期以确保只有一个。如果你也想接受科学记数法,你也需要处理它。

检查 not 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;
于 2012-09-14T00:40:47.487 回答
0
if (isdigit(userInput[i]) || userInput[i]=='.') {
  printf("Valid input.\n");
}
else return -1;
于 2012-09-14T00:41:11.697 回答