【问题标题】:Using cin.get to get an integer使用 cin.get 获取整数
【发布时间】:2012-11-16 17:59:36
【问题描述】:

我想一个一个地得到一串数字,所以我使用while循环 以cin.get() 作为函数,逐一获取我的数字。

cin.get() 将数字设为chars,即使我正在尝试使用 铸造我无法让我的变量包含数值而不是 ascii 值 我得到的数字作为输入。

【问题讨论】:

    标签: c++ casting


    【解决方案1】:

    cin.get 无法解析数字。您可以手动完成 - 但既然它已经存在,为什么还要重新实现它呢?*

    int number;
    std::cin >> number;
    

    一般来说,流操作符(<<>>)负责格式化输出和输入,而istream::get 只提取原始字符。


    *当然,如果你不得不重新实现这个功能,那也没用。

    要从数字字符中获取数值,您可以利用十进制数字 0-9 的字符代码是连续的。所以下面的函数可以对它们进行转换:

    int parse_digit(char digit) {
        return digit - '0';
    }
    

    【讨论】:

    • 我不允许使用我在讲座中没有学到的功能。
    • @Eran 哦,太好了,多么愚蠢的要求。好吧,让我修改答案。
    • 不需要static_cast。编译器会在不被告知的情况下将char 值转换为int
    • @Eran 是时候开始用自己的头脑思考了 ;)
    • @KonradRudolph - 在过去,一些 C 程序员会转换 malloc 的返回值“用于文档”:int *ip = (int*)malloc(3);。如果他们忘记了#include <stdlib.h>,编译器会将malloc 视为返回int 的函数(是的,我确实说这是古老的C)。在int 与指针大小不同的架构上,这会导致重大问题。所以我从来没有喜欢使用强制转换来记录程序员希望编译器无论如何都会做的事情,因为这种强制转换可以将编译时错误变成运行时错误。
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多