用户输入 - C(不允许某些字符)

时间:2012-09-14 00:37:14

标签: c user-input

我有一个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测试了)?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

if (isdigit(userInput[i]) || userInput[i]=='.') {
  printf("Valid input.\n");
}
else return -1;