C++ 可以数字是否用于检查整数中的字母?

C++ 可以数字是否用于检查整数中的字母?,c++,int,C++,Int,我在笔记中找到了一个函数,上面写着: int isdigit(int c); 如果c是数字,则返回true 但是当我在eclipse中不断发现我找不到的错误时 到目前为止,我的代码是: for(;;) { if (int !isdigit(int(library[count].tele))) { // if a letter, printf("Please enter numbers only."); count --; Menu();

我在笔记中找到了一个函数,上面写着:

int isdigit(int c);
如果
c
是数字,则返回
true

但是当我在eclipse中不断发现我找不到的错误时

到目前为止,我的代码是:

for(;;) {
    if (int !isdigit(int(library[count].tele))) { // if a letter,
        printf("Please enter numbers only.");
        count --;
        Menu();
    }
    else
        break;
}
库[count].tele
类型为
int
(在结构中)


我要做的就是检查电话号码中是否有字母。

是的,您可以使用
isdigit
。但是,您必须对输入字符串中的每个字符分别应用
isdigit
,并根据它返回的内容做出决定


你说
library[count].tele
int
类型。当该值存储在
int
中时,判断它是否包含任何非数字已经太晚了(它不能)。因此,在从字符串转换为
int
isdigit
之前必须执行检查,因为在原始C中,一个字符代码被处理为整数,以便有足够的范围将
EOF
编码为不能作为字符出现的值

在C++中,最好将其包起来,以避免非ASCII字符的未定义行为,如

bool isDigit( char const c )
{
    return !!::isdigit( (unsigned char)c );
}
它检查单个字符

要检查字符串,可以依次检查每个字符:

bool isDigits( string const& s )
{
    for( char c : s )
    {
        if( !isDigit( c ) ) { return false; }
    }
    return true;
}
此解决方案依赖于基于ASCII的编码假设,但实际上,截至2013年,您可能遇到的所有编码都基于ASCII


“砰砰”
避免了使用最多的C++编译器Visual C++的愚蠢警告。为此,不能用铸件代替。除了愚蠢的警告抑制外,此显式转换不是必需的:最终效果与隐式转换的语言保证相同!isdigit(ch)
将测试
ch
是否不是数字字符(“0'-'9')。这与测试字母不同,因为对于所有非数字字符(不仅仅包括字母),测试结果都是
true

在这种情况下,很可能是
!isdigit(ch)
实际上正是您想要的,但是如果您想专门检查字母,您可以使用isalpha(ch)

如果要一次性检查整个字符串中的有效字符(即不使用循环),只需使用:

if( strspn( telehone_num, "0123456789" != strlen(telephone_num) ) 
{ 
    printf("Please enter numbers only.");
    Menu();
}
其中,telephone_num是一个C字符串(不是int)。当然,由于您标记了C++而不是C,所以可能有更好的解决方案,使用STD::String。

除此之外,您可能会考虑在不同区域中有可能允许的电话号码约定。例如,在英国,通常用空格将区号与本地号码分开,例如:

01225 123456
此外,国际用户可以将数字表示为:

+44 (0)1225 123456

意思是“如果从英国境外拨打电话,先拨本地国际电话号码,然后拨区号,省去前导零,再拨用户号码”。仅用数字很难传达这么多信息。除非是机器而不是人来拨打电话号码,否则有时最好让用户随意输入。

“在eclipse中不断出现错误”。你不会去看医生说“我感到疼痛”,也不会告诉他什么样的疼痛,是吗?请添加准确的错误消息。
int
int
,它不能“包含字母”。您可能想在读取输入的任何地方检查此项。此外,
int
不适合存储电话号码,因为1)电话号码可能太大,2)它不会保留任何前导零。考虑使用字符串。我的坏。erorr在第二行:“这一行有多个标记-语法错误-预期表达式”谢谢大家,我想我会把它改成char:)这个问题毫无意义。他将电话号码存储在一个整数中,并使用isdigit来避免字母?@user93353:可能是没有意义,但可能不是。给定的代码无论如何都不会编译。因此,isHe没有明确说明变量类型是什么,它明确表示变量类型是int。@user93353:谢谢!对不起,我没注意到。harumph,无意义的问题他说,
库[count]。tele
是一个int-那么字符串从哪里来?@user93353:这正是我的观点——当它是一个
int
时,现在弄清楚它是否包含任何非数字已经太晚了:)可能是你应该在答案中添加你的观点-否则你的答案没有意义,因为这个问题没有意义。@user93353:Fair point。编辑。