ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在C中消除std :: isalpha()的歧义

2019-09-01 19:08:49  阅读:182  来源: 互联网

标签:sfml c std


所以我目前正在编写一个带有用户文本输入的程序的一部分.我想忽略所有不是字母的输入字符,所以我认为std :: isalpha()是一个很好的方法.不幸的是,据我所知,有两个std :: isalpha()函数,因此通常需要从特定于语言环境的函数中消除歧义:

(int(*)(int))std::isalpha()

如果我不消除歧义,std :: isalpha似乎在读取大写时返回true但在读取小写字母时返回false(如果我直接打印返回的值,则返回0表示非alpha字符,1表示大写字符,以及2表示小写字符).所以我需要这样做.

我以前在另一个程序中这样做过,但出于某种原因,在这个项目中,我有时会得到“ISO C禁止”错误.请注意,有时候.这是有问题的代码区域(这一起出现在一起,两者之间没有任何东西):

std::cout << "Is alpha? " << (int(*)(int))std::isalpha((char)Event.text.unicode) << "\n";

if ( (int(*)(int))std::isalpha((char)Event.text.unicode) == true)
{
    std::cout << "Is alpha!\n";
    //...snip...
}

第一个例子,我将返回的值发送到std :: cout,工作正常 – 我没有得到任何错误,我得到了预期的值(非alpha为0,alpha为1),如果这是我唯一的地方尝试消除歧义,程序编译并运行正常.

然而,第二个例子抛出了这个:

error: ISO C++ forbids comparison between pointer and integer

并且只有在我删除(int(*)(int))片段时才会编译,此时会出现不良行为.有人可以在这里启发我吗?

解决方法:

您正在将std :: alpha()调用的返回值强制转换为int(*)(int),然后将该指针与true进行比较.比较指向布尔值的指针没有多大意义,你得到一个错误.

现在,在没有强制转换的情况下,将std :: alpha()返回的int与true进行比较. bool是一个整数类型,为了比较两种不同的整数类型,首先将值转换为相同的类型.在这种情况下,它们都转换为int. true变为1,如果std :: isalpha()返回2,则比较最终为2!= 1.

如果你想将std :: alpha()的结果与bool进行比较,你应该将返回的内容转换为bool,或者简单地省略比较并使用if(std :: isalpha(c)){.. }

标签:sfml,c,std
来源: https://codeday.me/bug/20190901/1785208.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有