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