我有问题。
我的程序需要检查输入是否为数字或其他任何内容,在CI搜索中发现isdigit(int)
是为此提供的函数..但它只检查48<=ASCII<=57
。
但是,如果我只需检查数字怎么办?是否有isInteger()
,isReal()
,isFloat()
等功能?如果没有,那么我该如何检查呢?
如果isdigit()
也是如此,我遇到了问题:
#include<stdio.h>
#include<ctype.h>
int main(){
int i = 1;
printf("%d",isdigit(i));
return 0;
}
它输出0
,我不明白,它应该是非零值......
答案 0 :(得分:4)
阅读isdigit(3)的文档。它适用于字符,而不适用于数字。所以isdigit('2')
应该是真的(非零)。正如answered by pmg所见strtol(3) ...
如果你想测试UTF-8或Unicode的数字,那就复杂得多。使用库函数,例如来自Glib for Unicode的g_unichar_is_digit。
你可能会犯一个根本性的错误。 number不是由数字组成的。用数字表示表示或写。所以两个,2(十进制),II(罗马符号),0b10
或10(二进制), deux (法语),1+1
(算术表达式),二(中文)....都代表相同的数字(它是一个的后继者),但只有第二个表示--decimal 2
- 有一个数字。
答案 1 :(得分:4)
假设输入是一个字符串,请使用strtol()
和/或strtod()
。
实施例
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char input[1000];
// get input, don't forget to check for errors
if (fgets(input, sizeof input, stdin) == NULL) {
fprintf(stderr, "Error in input\n");
exit(EXIT_FAILURE);
}
char *err;
errno = 0;
long x = strtol(input, &err, 10);
if (errno || *err) {
fprintf(stderr, "input is not an integer in the range for `long`.\n");
exit(EXIT_FAILURE);
}
errno = 0;
double y = strtod(input, &err);
if (errno || *err) {
fprintf(stderr, "input is not a correct double.\n");
exit(EXIT_FAILURE);
}
// use x and y as needed
return 0;
}
答案 2 :(得分:2)
答案 3 :(得分:1)
你可以试试这个:
bool checkNumber(const char *str)
{
while(*str != '\0')
{
if(*str < '0' || *str > '9')
return false;
str++;
}
return true;
}
答案 4 :(得分:1)
试试这个男人......
#include<stdio.h>
int main()
{
char a;
printf("enter any int\n");
scanf("%c",&a);
if(isdigit(a))
{
printf("input was a number");
}
else
printf("input wasnt a number");
return 0;
}