【问题标题】:isdigit issue with cincin 的 isdigit 问题
【发布时间】:2011-11-19 23:43:58
【问题描述】:

我有一个有符号整数变量 当我在 main 中执行此操作时,它也会给我整数值的“错误”。

int main(){
    unsigned int a;
    while(cin>>a){
        if(!isdigit(a)){
            cout<<"Error"<<endl;
        }
    }
}

[编辑]: 感谢所有的回复,我明白了这个问题。现在,我如何检查 cin 是否仅读取整数而不是字母或任何其他字符。在 c++ 中是否有任何功能。谢谢

【问题讨论】:

标签: c++


【解决方案1】:

问题是isdigit() 接受一个字符,而不是一个整数。

当字符为'0''1'等时返回true...其ascii值为4849等...

试试这个方法:

char a;
while(cin>>a){
    if(!isdigit(a)){

【讨论】:

  • "它的 ascii 值为 48、49 等..." -- 除非字符集像 ebcdic 这样愚蠢。诚然,我从未见过这样的实现。
  • 我见过一个实际上有 EBCDIC 解析的实现:Perl 的 CGI.pm。诚然,它不是 C++,但仍然......
  • @BenjaminLindley:嗯,即使用户的执行CS是EBCDIC,'0'的ASCII值还是48……
【解决方案2】:

试试这个:

std::cout << "Is digit : " << isdigit('9');

然后阅读:

http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

如果您仍有问题,请告诉我们。

【讨论】:

  • 感谢您的链接...那么,我如何检查 cin 是否只读取整数而不是字母或其他任何内容?
  • @user1035927 如果您阅读链接和示例,您将理解。我更喜欢这种方式,而不是直接给你解决方案。函数的输入必须是数字的 ASCII 值。有关详细信息,请查看 Mysticial 的答案。
【解决方案3】:

如果你想确保你成功读取了你想要的类型,你可以使用 istream::good()

unsigned int a;
std::cin >> a;
if(!std::cin.good()) {
    std::cout << "Error!\n";
} else {
    std::cout << a;
}

【讨论】:

  • 嗨 Bames,同样的事情可以在 while 循环中完成吗?因为我必须不断地从文本文件中读取输入。谢谢
  • 是的,你可以循环使用它。如果用户的输入有错误但您想清理并继续读取输入,您可以使用 clear() 成员函数清除流上的错误。
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多